winfrom datagridview中DataGridViewTextBoxColumn的联动处理

复制代码
这个问题有两种方法 第一种是用DataGridview中自带的DataGridViewTextBoxColumn 控件,第二种是动态添加combobox控件

方法一:

首先 窗体上拖拽一个 DataGridview

然后在这个DataGridview中添加两列DataGridViewTextBoxColumn (第一列叫A,第二列叫B)

然后绑定A代码

            A.DataSource = ds.Tables[0].DefaultView;
            A.DisplayMember = "table_name";
            A.ValueMember = "table_name";
            ((DataGridViewComboBoxColumn)dataGridView1.Columns[0]).DefaultCellStyle.NullValue = "--请选择--";  //默认值

其次是绑定B代码

             //当前选中行的第二列赋值

             ((DataGridViewComboBoxCell)dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[1]).DataSource = ds.Tables[0].DefaultView;
            ((DataGridViewComboBoxCell)dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[1]).DisplayMember = "comments";
            ((DataGridViewComboBoxCell)dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[1]).ValueMember = "column_name";
            ((DataGridViewComboBoxColumn)dataGridView1.Columns[2]).DefaultCellStyle.NullValue = "--请选择--";

然后添加SelectedIndexChanged事件代码



  private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            DataGridView dgv = (DataGridView)sender;
            if (dgv.CurrentCell.OwningColumn.Name == "A")
            {
                ComboBox cb = (ComboBox)e.Control;
                cb.SelectedIndexChanged += new EventHandler(comboBox_SelectedIndexChanged);
            }
        }

            

SelectedIndexChanged事件代码



 public void comboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox comboBox = (ComboBox)sender;
            if (dataGridView1.CurrentCell.OwningColumn.Name == "表名")
            {
                if (comboBox.Text != "")
                {

                    //这是绑定B的方法
                    DBFieldNote(comboBox.Text);
                }
            }
        }



方法二:

首先实例化combobox对象

  private ComboBox comboBox = new ComboBox();

   private ComboBox cb = new ComboBox();

其次:

      this.dataGridView1.Controls.Add(comboBox);//将控件添加到DataGridview中
                DBTableName();//绑定comboBox
                comboBox.Visible = false;
                comboBox.SelectedIndexChanged += new EventHandler(comboBox_SelectedIndexChanged);//添加事件

 private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            string name = ((ComboBox)sender).Text;
            dataGridView1.CurrentCell.Value = name;//将选中的值添加到DataGridview当前选中的单元格里
            DBFieldNote(name);//绑定第二个combobox(也就是cb)       
        }

 public void DBFieldNote(string tablename)
        {
            this.dataGridView1.Controls.Add(cb);
            cb.Visible = false;
            cb.SelectedIndexChanged += new EventHandler(cb_SelectedIndexChanged);
          ......
        }

 private void cb_SelectedIndexChanged(object sender, EventArgs e)
        {
            dataGridView1.CurrentCell.Value = cb.Text;
        }
    private void dataGridView1_CurrentCellChanged(object sender, EventArgs e)
        {
            if (dataGridView1.CurrentCell != null)
            {
                if (dataGridView1.CurrentCell.ColumnIndex == 1)//如果选中的是第一列 就显示第一个combobox
                {
                    System.Drawing.Rectangle rect = dataGridView1.GetCellDisplayRectangle(dataGridView1.CurrentCell.ColumnIndex, dataGridView1.CurrentCell.RowIndex ,false);//获取当前选中的单元格的属性(宽 ,高等)
                    comboBox.Left = rect.Left;
                    comboBox.Top = rect.Top;
                    comboBox.Width = rect.Width;
                    comboBox.Height = rect.Height;
                    comboBox.Visible = true;
                }
                else if (dataGridView1.CurrentCell.ColumnIndex==2)//如果是选中第二列就显示cb
                {
                    System.Drawing.Rectangle rect1 = dataGridView1.GetCellDisplayRectangle(comboxIndex + 1, dataGridView1.CurrentCell.RowIndex, false);
                    cb.Left = rect1.Left;
                    cb.Top = rect1.Top;
                    cb.Width = rect1.Width;
                    cb.Height = rect1.Height;
                    cb.Visible = true;
                }
               
            }
            else
            {
                comboBox.Visible = false;


            }
        }
复制代码

 

posted @   IT苦行僧-QF  阅读(2630)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示