• 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。后。你在点击第二次。会触发之前的事件。在触发当前的事件

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

  • 相关阅读:
    A Simple Problem with Integers poj 3468 多树状数组解决区间修改问题。
    Fliptile 开关问题 poj 3279
    Face The Right Way 一道不错的尺取法和标记法题目。 poj 3276
    Aggressive cows 二分不仅仅是查找
    Cable master(二分题 注意精度)
    B. Pasha and String
    Intervals poj 1201 差分约束系统
    UITextField的快速基本使用代码块
    将UIImage转换成圆形图片image
    color转成image对象
  • 原文地址:https://www.cnblogs.com/lgx5/p/7509861.html
Copyright © 2020-2023  润新知