C# DataGridView中创建可编辑下拉框

在DataGridView中创建下拉框,可直接选择备选值。源码已经上传,有需要可以下载参考。
真实显示效果如下图:在这里插下拉框入图片描述

一. 先创建一个datagridview参数列表

                ParaTb = new DataTable();
                //添加列
                DataColumn[] Col = new DataColumn[2];
                for (ushort i = 0; i < Col.Length; i++)
                    Col[i] = new DataColumn();
                Col[0].ColumnName = "参数名称";
                Col[1].ColumnName = "参数值";
                ParaTb.Columns.AddRange(Col);

二. 设置创建的参数列表显示效果

                //设置行高
                for (byte i = 0; i < dataGridView1.Rows.Count; i++)
                    dataGridView1.Rows[i].Height = 25;
                //设置列宽
                int wd = (dataGridView1.Width - 10) / 3;
                dataGridView1.Columns[0].Width = wd * 2;
                dataGridView1.Columns[1].Width = wd;
                dataGridView1.Columns[0].ReadOnly = true;
                dataGridView1.Columns[1].ReadOnly = false;
                dataGridView1.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable;
                dataGridView1.Columns[1].SortMode = DataGridViewColumnSortMode.NotSortable;

                dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dataGridView1.ColumnHeadersDefaultCellStyle.Font = new Font("黑体", 9);
                dataGridView1.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dataGridView1.DefaultCellStyle.Font = new Font("黑体", 9);

                dataGridView1.RowHeadersVisible = false;
                dataGridView1.AllowUserToAddRows = false;
                dataGridView1.AllowUserToDeleteRows = false;
                dataGridView1.AllowUserToResizeColumns = false;
                dataGridView1.AllowUserToResizeRows = false;

                dataGridView1.MultiSelect = false;

三. 创建一个Combox下拉框控件

            cbbItemsList = new List<string>();
            cbb = new ComboBox();
            cbb.DropDownStyle = ComboBoxStyle.DropDown;
            cbb.BackColor = Color.LightGreen;
            cbb.ForeColor = Color.Black;
            cbb.Visible = false;

四. 将创建的Combox控件加入列表中

dataGridView1.Controls.Add(cbb);

五. 设置Combox下拉框控件的事件

  1. 选中项索引变更事件
        private void cbb_SelectIndexChanged(object sender, EventArgs e)
        {
            ComboBox cbb = sender as ComboBox;
            cbb.Visible = false;
        }
        private void cbb_Leave(object sender, EventArgs e)
        {
            ComboBox cbb = sender as ComboBox;
            cbb.Visible = false;
        }
  1. 可见性变更事件
        private void cbb_VisibleChanged(object sender, EventArgs e)
        {
            ComboBox cbb = sender as ComboBox;
            if (cbb.Visible == false)
            {
                if (dataGridView1.Contains(cbb))
                    dataGridView1.CurrentCell.Value = ((ComboBox)sender).Text;
                else
                    dataGridView1.CurrentCell.Value = ((ComboBox)sender).Text;
            }
        }
  1. 下拉框有键盘输入事件
        private void cbb_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.D0 || e.KeyCode == Keys.NumPad0)
            {
                ComboBox cbb = sender as ComboBox;
                cbb.Visible = true;
                cbb.Focus();
                if (cbb.Text.Contains("*"))
                {
                    cbb.Text = "";
                    cbb.SelectionStart = 0;
                }
                else
                {
                    cbb.SelectionStart = cbb.Text.Length;
                }
            }
        }

六. 双击列表时,弹出Combox下拉框

                    Rectangle rectangle = dataGridView1.GetCellDisplayRectangle(dataGridView1.CurrentCell.ColumnIndex, dataGridView1.CurrentCell.RowIndex, false);
                    string value = dataGridView1.CurrentCell.Value.ToString();
                    cbb.Text = value;
                    cbb.Left = rectangle.Left;
                    cbb.Top = rectangle.Top;
                    cbb.Width = rectangle.Width;
                    cbb.Height = rectangle.Height;

                    cbb.Items.Clear();
                    cbbItemsList.Clear();
                    int rowIndex = e.RowIndex;

                    if (dataGridView1[0, rowIndex].Value.ToString().Contains("速度"))
                    {
                        cbbItemsList.Add("1000");
                        cbbItemsList.Add("2000");
                        cbbItemsList.Add("3000");
                        cbbItemsList.Add("5000");
                        cbb.Items.AddRange(cbbItemsList.ToArray());
                        cbb.Visible = true;
                        cbb.Focus();
                    }
  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
DataGridView是Windows Forms常用的表格控件,它提供了下拉框编辑功能,可以让用户通过下拉选择来编辑单元格的内容。要实现DataGridView编辑下拉框,首先需要为单元格添加一个下拉框控件作为编辑控件。可以通过DataGridView的EditingControlShowing事件来实现这个功能。当单元格进入编辑状态时,会触发EditingControlShowing事件,我们可以在这个事件判断当前单元格的列是否是需要下拉框编辑的列,如果是,则可以将一个下拉框控件赋值给当前单元格的编辑控件。 接着,我们需要为下拉框控件添加数据源,以便用户可以从下拉框选择相应的内容。可以为下拉框控件的DataSource属性赋值一个数据源,比如DataTable、List等,然后再设置下拉框控件的DisplayMember和ValueMember属性,指定要显示的内容和对应的值。这样下拉框就会显示数据源的内容,并且用户可以通过下拉选择来编辑单元格的内容。 最后,还需要处理用户编辑下拉框后的值,可以通过DataGridView的CellEndEdit事件来实现。当用户完成对单元格的编辑后,会触发CellEndEdit事件,我们可以在这个事件获取用户编辑后的值,并更新到相应的数据源。 通过以上步骤,就可以实现DataGridView编辑下拉框功能,用户可以通过下拉框选择内容来编辑单元格的值,从而提高了数据的输入效率和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

工控老秃驴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值