winfrom表格DataGridView下拉框DataGridViewComboBoxColumn选择事件

来源:互联网 发布:数据挖掘 毕业论文 编辑:程序博客网 时间:2024/04/25 08:34


1、列的ColumnType选择:DataGridViewComboBoxColumn;


2、表格的属性EditMode设置为EditOnEnter;


3、表格添加EditingControlShowing事件;


4、实现单击一次显示下拉列表框,添加CellEnter事件;


bool isBind = false;//是否已经绑定事件
        private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
           //判断要处理的DataGridViewComboBoxColumn名称,若符合条件,编辑控件被强制转换为ComboBox以处理,添加SelectedIndexChanged事件
            if (this.dataGridView1.CurrentCell.OwningColumn.Name == "Good" && dataGridView1.CurrentCell.RowIndex != -1)
            {
                System.Windows.Forms.ComboBox cb = (System.Windows.Forms.ComboBox)e.Control;


                if (!isBind)
                {
                    cb.SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);
                    isBind = true;
                }
            }
            else
            {
                isBind = false;
            }
        }
        
        private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            System.Windows.Forms.ComboBox cb = (System.Windows.Forms.ComboBox)sender;
            //MessageBox.Show("dao");
            if (cb.SelectedIndex > -1 && cb.SelectedValue != null && cb.SelectedValue.ToString() != "System.Data.DataRowView")
            {
                string ss = cb.SelectedValue.ToString();
                int index = int.Parse(cb.SelectedValue.ToString());
                DataGridViewRow dv = this.dataGridView1.CurrentRow;
                if (index > -1)
                {
                    DataRow[] dr = dtPrice.Select("id=" + index.ToString());
                    if (dr.Count() > 0)
                    {
                        dv.Cells["price"].Value = dr[0]["price"].ToString();
                    }
                }
            }
            if (isBind)
            {
                cb.SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged);
                isBind = false;
            }
            
        }
        private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            //实现单击一次显示下拉列表框
            if (dataGridView1.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn && e.RowIndex != -1)
            {
                SendKeys.Send("{F4}");
            }
        }


5、数据绑定:

DataTable dtPrice = new DataTable();

dtPrice = new DataTable();
            dtPrice.Columns.Add("id", typeof(int));
            dtPrice.Columns.Add("price", typeof(double));
            DataRow drp1 = dtPrice.NewRow();
            drp1["id"] = 1;
            drp1["price"] = "555";
            dtPrice.Rows.Add(drp1);
            DataRow drp2 = dtPrice.NewRow();
            drp2["id"] = 2;
            drp2["price"] = "6";
            dtPrice.Rows.Add(drp2);
            DataRow drp3 = dtPrice.NewRow();
            drp3["id"] = 3;
            drp3["price"] = "90";
            dtPrice.Rows.Add(drp3);


 DataTable dtGood = new DataTable();
            dtGood.Columns.Add("id",typeof(int));
            dtGood.Columns.Add("name", typeof(string));
            DataRow dr1 = dtGood.NewRow();
            dr1["id"] = 1;
            dr1["name"] = "手机";
            dtGood.Rows.Add(dr1);
            DataRow dr2 = dtGood.NewRow();
            dr2["id"] = 2;
            dr2["name"] = "苹果";
            dtGood.Rows.Add(dr2);
            DataRow dr3 = dtGood.NewRow();
            dr3["id"] = 3;
            dr3["name"] = "衣服";
            dtGood.Rows.Add(dr3);

            //Good为下拉框的名称
            this.Good.DataSource = dtGood;
            this.Good.DisplayMember = "name";
            this.Good.ValueMember = "id";
            this.Good.DataPropertyName = "id";


            DataTable dtSource = new DataTable();
            dtSource.Columns.Add("id", typeof(int));
            dtSource.Columns.Add("price", typeof(int));
            DataRow drs1 = dtSource.NewRow();
            drs1["id"] = 1;
            drs1["price"] = 555;
            dtSource.Rows.Add(drs1);
            DataRow drs2 = dtSource.NewRow();
            drs2["id"] = 2;
            drs2["price"] = 666;
            dtSource.Rows.Add(drs2);
            this.dataGridView1.DataSource = dtSource;

          行编辑时,列“id”存放的是下拉框选择项的id。

          

0 0