• 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;
    
    
                }
            }
  • 相关阅读:
    orleans 的一种模式
    在.net4的环境下使用Microsoft.AspNet.SignalR.Client 2.4.0
    微信卡券领用的附加测试
    SVN忽略本地文件不提交,同时不删除服务器上的文件
    SQL Server 2017安装错误:Polybase要求安装Oracle JRE 7更新51或更高版本的两种解决方法
    SQL Server遍历表(临时表)
    无法确定条件表达式的类型,因为“DateTime”和“<null>”之间没有隐式转换|Nullable类型问题与?:条件运算符
    C# 反射获取对象的内容
    c# 计算执行时间,性能,运行时间Stopwatch
    JS,JQuery循环数组,循环对象生成需要的数据
  • 原文地址:https://www.cnblogs.com/liuqifeng/p/9149350.html
Copyright © 2020-2023  润新知