1. 程式人生 > >winform dataGridView DataGridViewComboBoxColumn 下拉框事件程式碼

winform 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.Textcbo.Text獲取的值是相同的
      
            //做完處理,須撤銷動態事件。如果不撤銷會遇到什麼問題。你可以自己試試
            cbo.SelectedIndexChanged -= new EventHandler(ccgl_SelectedIndexChanged);
        //或者
      combox.SelectedIndexChanged -= new EventHandler(cbo_SelectedIndexChanged);

}
複製程式碼

正如上面說的。如果你不取消SelectedIndexChanged事件。當你觸發一個ComboBox。後。你在點選第二次。會觸發之前的事件。在觸發當前的事件

以至於以此類推。觸發事件會很多。