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;

            }
        }

原文地址:https://www.cnblogs.com/liuqifeng/p/9149350.html

时间: 2024-10-15 01:19:11

winfrom datagridview中DataGridViewTextBoxColumn的联动处理的相关文章

winfrom 中datagridview中checkbox的使用方法

private void dgdv_skjs_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex != -1) { DataGridViewCheckBoxCell checkCell_rxwk = (DataGridViewCheckBoxCell)dgdv_skjs.Rows[e.RowIndex].Cells["rxwk"]; DataGridViewCheckBoxCell

Datagridview 添加checkbox列,并判断Datagridview 中的checkbox列是否被选中

Solution1://In Fill DataGridViewEvent : DataGridViewCheckBoxColumn ChCol = new DataGridViewCheckBoxColumn(); ChCol.Name = "CheckBoxRow"; ChCol.HeaderText = "CheckboxSelection"; ChCol.Width = 50; ChCol.TrueValue = "1"; ChCol.F

DataGridView 中添加CheckBox和常用处理方式 .

DataGridView 中添加CheckBox和常用处理方式 文章1 转载:http://blog.csdn.net/pinkey1987/article/details/5267934 DataGridView中添加CheckBox控件主要采用两种方法 1.  通过在DataGridView的Columns中添加System.Windows.Forms.DataGridViewCheckBoxColumn类型的列.并可以设置该列相关的属性信息. 2. 在程序代码中直接添加相应的代码 Syst

将Excel导入DataGridView 中的"select * from [Sheet1$]"中[ ]里面表单名的动态获取

Sheet1$是Excel默认的第一个表名,如果改动:select * from [Sheet1$]"将查询失败,因此应根据选择自动获取excel表名: 1 OpenFileDialog ofd = new OpenFileDialog(); //选择文件路径 2 ofd.Title = "Excel文件"; 3 ofd.FileName = ""; 4 ofd.Filter = "Excel文件(*.xls)| *.xls"; 5 s

删除dataGridview中选中的一行或多行

DialogResult RSS = MessageBox.Show(this,"确定要删除选中行数据码?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning); switch(RSS) { case DialogResult.Yes: for (int i = this.dataGridView1.SelectedRows.Count; i > 0; i--) { int ID = Convert.ToI

vs 2015 rdlc报表绑定datagridview中的数据

这几天一直想要实现rdlc报表绑定datagridview中的数据,始终在虚拟表向rdlc报表绑定这一步上出错.今天从下午4点到七点四十一直在尝试.最终还是实现了,最然并不知所以然,这个问题还是以后在考虑吧,目前的项目要紧. 首先是  datagridview中的数据传到虚拟表中. for (int i = 0; i < dgvscan.Columns.Count - 1; i++) { dtout.Columns.Add(dgvscan.Columns[i].Name); } //添加行 fo

c#.net循环将DataGridView中的数据赋值到Excel中,并设置样式

Microsoft.Office.Interop.Excel.Application excel =                new Microsoft.Office.Interop.Excel.Application();            excel.SheetsInNewWorkbook = 1;            excel.Workbooks.Add(); //设置Excel列名            excel.Cells[1, 1] = "学号";     

[Winform] 使DataGridView中设置的DataGridViewComboBox可编辑

在DataGridView中设置的DataGridViewComboBox,默认是不可编辑的,即使将其列属性DisplayStyle设置成ComboBox或其他,也无法编辑: 故作如下处理: 一  DataGridViewComboBoxCell 重写DataGridViewComboBox的单元控件DataGridViewComboBoxCell 1 /// <summary> 2 /// 自定义可编辑下拉框单元 3 /// </summary> 4 public class D

C#读取Excel表格数据到DataGridView中和导出DataGridView中的数据到Excel

其实想在datagridview中显示excel表格中的数据跟读取数据库中的数据没什么差别,只不过是创建数据库连接的时候连接字段稍有差别. private void btnShow_Click(object sender, EventArgs e) { OpenFileDialog fd = new OpenFileDialog();//首先根据打开文件对话框,选择excel表格 ofd.Filter = "表格|*.xls";//打开文件对话框筛选器 string strPath;/