zoukankan      html  css  js  c++  java
  • winform dataGridView DataGridViewComboBoxColumn 下拉框事件

    有一个dataGridView ,有一列是DataGridViewComboBoxColumn 。用动态绑定,在绑定数据的时候。我们也给这一列绑定数据

    在dataGridView的RowsAdded事件中写代码

     
            /// <summary>
            /// 添加新行
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void dgvGoodsType_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
            {
                DataTable dt = DAL.SQLHelper.Adapter("select type from OrderType");
           //这里的 "T_分类" 是DataGridViewComboBoxColumn列名。
                DataGridViewComboBoxColumn cbb = dgvGoodsType.Columns["T_分类"] as DataGridViewComboBoxColumn; 
                if (cbb != null)
                {
                    cbb.DefaultCellStyle.NullValue = lbType.Text;//显示默认值 根据自己的需求改
                    cbb.DataPropertyName = "type";
                    cbb.ValueMember = "type";
                    cbb.DisplayMember = "type";
                    cbb.DataSource = dt;
                }
            }
     

    这里的DataGridViewComboBoxColumn 默认显示的下拉框,选择时需要点击三次,第一次选中单元格,第二次启用编辑,第三次打开下拉框。如果需要一次点击打开下拉框,可以启用DataGridView的CellEnter()事件,代码如下:

     
           private void dgvGoodsType_CellEnter(object sender, DataGridViewCellEventArgs e)
            {
                //实现单击一次显示下拉列表框
                if (dgvGoodsType.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn && e.RowIndex != -1)
                {
                    SendKeys.Send("{F4}"); 
                }
            }
     

    接下来我们给DataGridViewComboBoxColumn添加选择事件。当我们选择时。触发事件。需要在EditingControlShowing事件里面写。如下:

     
            ComboBox cbo = new ComboBox();
    
            private void dgvGoodsType_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
            {
                //判断相应的列
                //dgvGoodsType.Tag = dgvGoodsType.CurrentCell.RowIndex; //保存索引值
    
                if (dgvGoodsType.CurrentCell.OwningColumn.Name == "T_分类" && dgvGoodsType.CurrentCell.RowIndex != -1)
                {
                    cbo = e.Control as ComboBox; //保存当前的事件源。为了触发事件后。在取消
                    cbo.SelectedIndexChanged += new EventHandler(cbo_SelectedIndexChanged);
                }
            }
    void cbo_SelectedIndexChanged(object sender, EventArgs e) { ComboBox combox = sender as ComboBox;         //这里就可以写。触发后是逻辑代码 MessageBox.Show(combox.Text);                //combox.Text和cbo.Text获取的值是相同的        //做完处理,须撤销动态事件。如果不撤销会遇到什么问题。你可以自己试试 cbo.SelectedIndexChanged -= new EventHandler(cbo_SelectedIndexChanged);         //或者       combox.SelectedIndexChanged -= new EventHandler(cbo_SelectedIndexChanged); }
     

    正如上面说的。如果你不取消SelectedIndexChanged事件。当你触发一个ComboBox。后。你在点击第二次。会触发之前的事件。在触发当前的事件

    以至于以此类推。触发事件会很多。

  • 相关阅读:
    windows10+vs2010+lwip+Wireshark+winpcap环境变量配置
    Anaconda中安装了Libtiff模块,但运行程序显示ModuleNotFoundError: No module named 'libtiff'
    利用Anaconda软件安装opencv模块
    Windows10+Anaconda+PyTorch(cpu版本)环境搭建
    Spyder中报错: Check failed: PyBfloat16_Type.tp_base != nullptr
    Keras中图像维度介绍
    机器学习2-7
    LeetCode637. 二叉树的层平均值
    LeetCode617. 合并二叉树
    LeetCode590. N叉树的后序遍历
  • 原文地址:https://www.cnblogs.com/lgx5/p/7509861.html
Copyright © 2011-2022 走看看