1. 程式人生 > >winfrom datagridview中DataGridViewTextBoxColumn的聯動處理

winfrom datagridview中DataGridViewTextBoxColumn的聯動處理

color view AD DG 對象 當前 bob cell lse

這個問題有兩種方法 第一種是用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; } }

winfrom datagridview中DataGridViewTextBoxColumn的聯動處理