應用場景:
dataGridView需要某一個cell變成下拉框樣式。
思路詳解:
dataGridVie添加固定格式的row。
代碼:
DataGridViewRow row = new DataGridViewRow(); row.Cells.Add(new DataGridViewTextBoxCell()); DataGridViewComboBoxCell comboxcell = new DataGridViewComboBoxCell(); comboxcell.Items.Add("九"); comboxcell.Items.Add("平"); comboxcell.Items.Add("氣"); comboxcell.Items.Add("陰"); comboxcell.Items.Add("陽"); comboxcell.Items.Add("痰"); comboxcell.Items.Add("氣"); comboxcell.Items.Add("血"); comboxcell.Items.Add("特"); comboxcell.Items.Add("濕"); row.Cells.Add(comboxcell); row.Cells.Add(new DataGridViewTextBoxCell()); row.Cells.Add(new DataGridViewTextBoxCell()); row.Cells.Add(new DataGridViewTextBoxCell()); dataGridView_pinggu.Rows.Add(row);
下拉框事件代碼:
private void dataGridView_pinggu_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { DataGridView dgv = sender as DataGridView; //判斷相應的列 if (dgv.CurrentCell.GetType().Name == "DataGridViewComboBoxCell" && dgv.CurrentCell.RowIndex != -1) { //給這個DataGridViewComboBoxCell加上下拉事件 (e.Control as ComboBox).SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged); } } public void ComboBox_SelectedIndexChanged(object sender, EventArgs e) { ComboBox combox = sender as ComboBox; //這里比較重要 combox.Leave += new EventHandler(combox_Leave); try { //在這里就可以做值是否改變判斷 if (combox.SelectedItem != null) { Console.WriteLine(combox.SelectedItem.ToString()); int manNum = ShuJuFenXiService.getNumBySexAndProjectID("0", tizhiDic[combox.SelectedItem.ToString()]); int famNum = ShuJuFenXiService.getNumBySexAndProjectID("1", tizhiDic[combox.SelectedItem.ToString()]); dataGridView_pinggu.Rows[1].Cells[1].Value = combox.SelectedItem.ToString(); dataGridView_pinggu.Rows[1].Cells[2].Value = manNum + famNum; dataGridView_pinggu.Rows[1].Cells[3].Value = manNum; dataGridView_pinggu.Rows[1].Cells[4].Value = famNum; dataGridView_pinggu.Rows[1].Cells[5].Value = tizhiDic[combox.SelectedItem.ToString()]; } Thread.Sleep(100); } catch (Exception ex) { MessageBox.Show(ex.Message); } } public void combox_Leave(object sender, EventArgs e) { ComboBox combox = sender as ComboBox; //做完處理,須撤銷動態事件 combox.SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged); }
難點:
1.注意dataGridView屬性readOnly,設成false(界面模板設置))。要不然下拉框不顯示。如果需要不可編輯,可以設定單元格的readOnly屬性: dataGridView_pinggu.Rows[1].Cells[1].ReadOnly = true;
2.下拉框事件僅需給datagridview添加EditingControlShowing事件。