c# datagridview列形式为Combobox,每行下拉选项不一样

该博客介绍了如何在C#中为DataGridView的Combobox列动态设置每行不同的下拉选项。通过监听EditingControlShowing事件,根据当前行索引更新DataSource,并在ComboBox的SelectedIndexChanged事件中进行值的判断。此外,离开事件combox_Leave用于移除事件处理,防止重复触发。
摘要由CSDN通过智能技术生成

c# datagridview列形式为Combobox,每行下拉选项不一样

方法1:

 /// <summary>
        /// 首先给这个DataGridView加上EditingControlShowing事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgvSelectFun_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            DataGridView dgv = sender as DataGridView;

            判断相应的列
            if (dgv.CurrentCell.GetType().Name == "DataGridViewComboBoxCell" && dgv.CurrentCell.RowIndex != -1)
            {
                DataGridViewComboBoxCell combox = dgv.CurrentCell as DataGridViewComboBoxCell;
                combox.DataSource = FunsLib[dgv.CurrentCell.RowIndex].FuncSnALL; 
                //给这个DataGridViewComboBoxCell加上下拉事件
                (e.Control as ComboBox).SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);
            }
        }

        /// <summary>
        /// 组合框事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox combox = sender as ComboBox;

            //这里比较重要
            combox.Leave += new EventHandler(combox_Leave);
            try
            {
                //在这里就可以做值是否改变判断
                if (combox.SelectedItem != null)
                {
                    
                }
                Thread.Sleep(100);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// 离开combox时,把事件删除
        /// 这一步比较重要,如果不加,会导致selectedchanged事件一直触发
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void combox_Leave(object sender, EventArgs e)
        {
            ComboBox combox = sender as ComboBox;
            //做完处理,须撤销动态事件
            combox.SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged);
        }

方法2:
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
DataGridView dgv = sender as DataGridView;

        //判断相应的列
        if (dgv.CurrentCell.GetType().Name == "DataGridViewComboBoxCell" && dgv.CurrentCell.RowIndex != -1)
        {
             //此处绑定数据源,或者直接清除下拉列表,重新添加
            DataGridViewComboBoxCell combox = dgv.CurrentCell as DataGridViewComboBoxCell;
            combox.DataSource = FunsLib[i].FuncSnALL;//FunsLib:List<List<string>>

            //combox.Items.Clear();
            //combox.Items.AddRange(new string[] { "A1.", "A2." });//此处需要判断,根据对应行号,添加对应下拉列表,在此不再赘述
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值