在DataGridView上的指定单元格创建ComBox

这篇博客详细介绍了如何在.NET Windows Forms的DataGridView控件中实现特定单元格显示ComboBox的功能。作者首先声明了一个ComboBox对象,然后绑定数据源并设置其在单元格中的显示和交互。当用户选择ComboBox的项时,会更新对应单元格的值。当用户点击dataGridView的特定列时,ComboBox会显示在单元格上方,并根据已选值进行定位和赋值。在窗体构造时,初始化ComboBox并设置其事件处理程序。

1、声明 ComboBox ComBoxPsMode;

 

2、绑定配送模式下拉框
 /// <summary>
        /// 绑定配送模式下拉框
        /// </summary>
        private void BindComPsMode()
        {
            dataPSModeType = eCMyModule.eCMyData.SimpleExecuteDataSet("select PSMODEID,PSMODEMC from eCWMPSModeType ORDER BY PSModeID");//ComboBox数据源

            ComBoxPsMode.Items.Clear();
            for (int i = 0; i < dataPSModeType.Tables[0].Rows.Count; i++)
            {
                ComBoxPsMode.Items.Add(dataPSModeType.Tables[0].Rows[i]["PSMODEID"].ToString().Trim() + ":" + dataPSModeType.Tables[0].Rows[i]["PSMODEMC"].ToString().Trim());
            }
        }

 

3、ComBox的项改变后赋给单元格

    private void ComBoxPsMode_SelectedIndexChanged(object sender, EventArgs e)
        {
            int k = ComBoxPsMode.SelectedIndex;
            if (k > -1)
            {
                dGVeCSpYWXX.CurrentCell.Value = ComBoxPsMode.Items[k].ToString().Trim();
            }
        }

4、点datagridview后执行

 if ((this.dGVeCSpYWXX.CurrentCell.ReadOnly == false) && (this.dGVeCSpYWXX.Columns[dGVeCSpYWXX.CurrentCell.ColumnIndex].Name.Trim() == "PSModeType"))
            {
                this.ComBoxPsMode.SelectedIndex = this.ComBoxPsMode.Items.IndexOf(dGVeCSpYWXX.Rows[dGVeCSpYWXX.CurrentCell.RowIndex].Cells["ColPsModeID"].Value.ToString().Trim() + ":" + dGVeCSpYWXX.Rows[dGVeCSpYWXX.CurrentCell.RowIndex].Cells["PSModeType"].Value.ToString().Trim());  //对combobox赋值

                 Rectangle   R = dGVeCSpYWXX.GetCellDisplayRectangle(dGVeCSpYWXX.CurrentCell.ColumnIndex, dGVeCSpYWXX.CurrentCell.RowIndex, false);  //获取单元格位置
                 ComBoxPsMode.SetBounds( R.X + dGVeCSpYWXX.Location.X-5  , R.Y + dGVeCSpYWXX.Location.Y-5 , R.Width, R.Height); //重新定位combobox.中间有坐标位置的转换                                         
                 ComBoxPsMode.Visible = true;
                 ComBoxPsMode.Focus();
            }
            else
            {
                ComBoxPsMode.Visible = false;        
            }
5、窗体构造
 public RevisionGoodsInfo()
        {
            InitializeComponent();
            ComBoxPsMode = new ComboBox();
            ComBoxPsMode.Name = "ComBoxPsMode";
            ComBoxPsMode.SelectedIndexChanged+=new EventHandler(ComBoxPsMode_SelectedIndexChanged);
            ComBoxPsMode.Visible = false;
            ComBoxPsMode.DropDownStyle = ComboBoxStyle.DropDownList;
            dGVeCSpYWXX.Controls.Add(ComBoxPsMode);
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值