datagridview添加下拉列表列及添加选择事件
在前面的一天我添加了一个自定义的textbox列,没有用datagridview的自带列,那种方法比较灵活,添加下拉列表列是一样的道理,有兴趣的可以点下面的链接去看一下。
今天来研究下,怎么用datagridview自带的combox列。
效果如下:
1、首先来看下如何添加下拉列表列
private void Form1_Load(object sender, EventArgs e)
{
//绑定数据
GetData();
int rows = dataGridView1.Rows.Count;
DataGridViewComboBoxColumn px = new DataGridViewComboBoxColumn();
px.Items.Add("上衣");
px.Items.Add("裤子");
px.Items.Add("鞋");
px.DisplayStyle = DataGridViewComboBoxDisplayStyle.DropDownButton;
px.DefaultCellStyle.NullValue = "裤子";
dataGridView1.Columns.Add(px);
}
2、如何给下拉列表添加选择事件呢?
给datagridview添加一个EditingControlShowing事件
ComboBox mycb = new ComboBox();
int therowindex = -1;
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (dataGridView1.CurrentCell.ColumnIndex == 4 && dataGridView1.CurrentCell.RowIndex != -1)
{
mycb = (ComboBox)e.Control; //保存当前的事件源。为了触发事件后。在取消
mycb.SelectedIndexChanged += Mycb_SelectedIndexChanged;
therowindex = dataGridView1.CurrentCell.RowIndex;
}
}
private void Mycb_SelectedIndexChanged(object? sender, EventArgs e)
{
mycb = (ComboBox)sender;
//这里我比较懒,就直接弹出它的值来
MessageBox.Show(mycb.Text);
//处理完以后,如果换了combox,
//就要把它原来的事件去掉
//否则会出奇怪的问题
if (therowindex != dataGridView1.CurrentCell.RowIndex)
{
mycb.SelectedIndexChanged -= new EventHandler(Mycb_SelectedIndexChanged);
}
}