datagridview添加下拉列表列及添加选择事件

datagridview添加下拉列表列及添加选择事件

编码文章call10242025-04-25 11:08:2115A+A-

在前面的一天我添加了一个自定义的textbox列,没有用datagridview的自带列,那种方法比较灵活,添加下拉列表列是一样的道理,有兴趣的可以点下面的链接去看一下。

datagridview添加自定义的textbox列

今天来研究下,怎么用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);
    }
}

还有些细节,可以处理,我就没有再去改了。

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4