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

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

时间: 2024-10-11 23:25:53

winform dataGridView DataGridViewComboBoxColumn 下拉框事件的相关文章

Winform实现ComboBox下拉框与数据库的绑定

实现效果如下: 1.设计窗体 下拉框的名称cmbName 2.连接数据库 DBHelper类代码: class DBHelper { /// <summary> /// 创建静态连接字符串 /// </summary> private static string connString= "Data Source=.;Initial Catalog=Test;uid=sa;pwd=F123456789f"; public static SqlConnection

c# Winform PropertyGrid 实现下拉框 多选

1 using PropertyGridHelpers.Controls; 2 using System; 3 using System.Collections.Generic; 4 using System.ComponentModel; 5 using System.Drawing.Design; 6 using System.Windows.Forms; 7 using System.Windows.Forms.Design; 8 9 namespace PropertyGridHelpe

ZP的EXTJS学习笔记(三)——邮箱功能的开发(按钮事件、下拉框、分页、record小图标、整条数据格式处理、定时刷新、record复选删除、分组)

照例,先贴效果图: 本人比较满意,短时间开发的邮箱功能,这是收件箱,还有配套的发件箱与删除箱. 简单说下思路: 1.配置model.store,用的是MVC模式,可参考第一篇学习笔记. 2.页面简单布局: Ext.define('KitchenSink.view.mail.InBox', { extend: 'Ext.grid.Panel', alias : 'widget.inbox', xtype: 'inbox', autoHeight:true, bodyStyle:'width:100

js设置下拉框选中后change事件无效解决

下拉框部分代码: <select id="bigType"> <option value="">请选择</option> <option value="1">xiamen</option> <option value="2">beijing</option> </select> <select id="smallTy

Winform 下拉框绑定问题

在Winform中下拉框绑定的时候只能读到text属性值,Id的值不管怎么搞都读取不到,所以就百度找到了一种方式: public void CmdBind() { var data = _logic.GetCurrency();//数据源 if (!data.Any()) return; foreach (var currency in data) { cmdCurrencyName.Items.Add(new CurrencyItem { CurrencyName = currency.Des

关于下拉框的onchange事件和onclick选择value值。

下拉框的onchange事件和onclick,一般最好都选择onchange事件,onclick可能会不兼容有些浏览器. 下面是代码: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>选择</title> <script src="js/lib/jquery/v1.12.3/jquery-1.

easyui 绑定下拉框,下拉框选择改变事件的触发方法

//①定义下拉框 //离线公司[个人或公司] 下拉框 var tmpComOrPer = { type: 'combobox', options: { onSelect:function(data) { ComOrPerChange(false); }, editable:false, panelHeight: 'auto', valueField: 'Type', textField: 'label', data: [ { label: '@BaseRes.OSP_CTL_087', Type

下拉框的点击事件

下拉框是我们应用的比较多的页面元素,结合实际工作中遇到的问题说一下关于下拉框注册事件的一些例子,希望对大家有所帮助. $(function () { $(".events").change(function () { if ($(this).children('option:selected').val() == '所有事件') { $(".wrapper").addClass("all"); $(".wrapper").re

商品类型的下拉框绑定一个事件,通过ajax获取属性

html代码这么写 <!-- 商品属性 --> <table cellspacing="1" cellpadding="3" width="100%" style="display:none;" class="tab"> <tr><td> <select name="Goods[type_id]"> <option val