winform dataGridView DataGridViewComboBoxColumn 下拉框事件
阿新 • • 發佈:2017-09-12
pre 寫代碼 handle 取消 play div ember mes !=
有一個dataGridView ,有一列是DataGridViewComboBoxColumn 。用動態綁定,在綁定數據的時候。我們也給這一列綁定數據
在dataGridView的RowsAdded事件中寫代碼
/// <summary> /// 添加新行 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dgvGoodsType_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) { DataTable dt = DAL.SQLHelper.Adapter("select type from OrderType"); //這裏的 "T_分類" 是DataGridViewComboBoxColumn列名。 DataGridViewComboBoxColumn cbb = dgvGoodsType.Columns["T_分類"] as DataGridViewComboBoxColumn; if (cbb != null) { cbb.DefaultCellStyle.NullValue = lbType.Text;//顯示默認值 根據自己的需求改 cbb.DataPropertyName = "type"; cbb.ValueMember = "type"; cbb.DisplayMember = "type"; cbb.DataSource = dt; } }
這裏的DataGridViewComboBoxColumn 默認顯示的下拉框,選擇時需要點擊三次,第一次選中單元格,第二次啟用編輯,第三次打開下拉框。如果需要一次點擊打開下拉框,可以啟用DataGridView的CellEnter()事件,代碼如下:
private void dgvGoodsType_CellEnter(object sender, DataGridViewCellEventArgs e) { //實現單擊一次顯示下拉列表框 if (dgvGoodsType.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn && e.RowIndex != -1) { SendKeys.Send("{F4}"); } }
接下來我們給DataGridViewComboBoxColumn添加選擇事件。當我們選擇時。觸發事件。需要在EditingControlShowing事件裏面寫。如下:
ComboBox cbo = new ComboBox(); private void dgvGoodsType_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { //判斷相應的列 //dgvGoodsType.Tag = dgvGoodsType.CurrentCell.RowIndex; //保存索引值 if (dgvGoodsType.CurrentCell.OwningColumn.Name == "T_分類" && dgvGoodsType.CurrentCell.RowIndex != -1) { cbo = e.Control as ComboBox; //保存當前的事件源。為了觸發事件後。在取消 cbo.SelectedIndexChanged += new EventHandler(cbo_SelectedIndexChanged); } }
void cbo_SelectedIndexChanged(object sender, EventArgs e) { ComboBox combox = sender as ComboBox; //這裏就可以寫。觸發後是邏輯代碼 MessageBox.Show(combox.Text); //combox.Text和cbo.Text獲取的值是相同的 //做完處理,須撤銷動態事件。如果不撤銷會遇到什麽問題。你可以自己試試 cbo.SelectedIndexChanged -= new EventHandler(cbo_SelectedIndexChanged); //或者 combox.SelectedIndexChanged -= new EventHandler(cbo_SelectedIndexChanged); }
正如上面說的。如果你不取消SelectedIndexChanged事件。當你觸發一個ComboBox。後。你在點擊第二次。會觸發之前的事件。在觸發當前的事件
以至於以此類推。觸發事件會很多。
winform dataGridView DataGridViewComboBoxColumn 下拉框事件