應用場景:
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事件。
