C# 如何在dataGridView里设置两个列comboboxcolumn绑定级联事件的一个二级联动效果

当改变了公司后,部门那一列的选项也跟真改变。
这个dataGridView 是绑定的userBindingSource
公司这列的DataGridViewComboBoxColumn 是绑定的CoBindingSource
部门这列的DataGridViewComboBoxColumn 绑定的是deptBindingSource
上面这些都是用vs2005自动生成的代码做的。
然后给dataGridView 添加了个监听。当公司这列的某个单元格的值发生改变时触发一个事件。
事件代码如下:


try
{
Point a = dataGridView1.CurrentCellAddress;
int values = (int)this.dataGridView1.Rows[a.X].Cells[1].Value;
this.deptTableAdapter.FillBy(this.dataSet.dept, values);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

给公司这一列的ComboBox添加事件


dataGridView.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dataGridView_EditingControlShowing);
private void dataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    if (dataGridView.CurrentCell.OwningColumn.Name.Equals("公司") && e.Control is ComboBox)
    {
        (e.Control as ComboBox).SelectedValueChanged -= new EventHandler(ComboBox_SelectedValueChanged);
        (e.Control as ComboBox).SelectedValueChanged += new EventHandler(ComboBox_SelectedValueChanged);
    }
}

void ComboBox_SelectedValueChanged(object sender, EventArgs e)
{
   if ((sender as ComboBox).SelectedItem != null)
   {
        dataGridView.CurrentRow.Cells["部门"].Value = ((sender as ComboBox).SelectedItem as DataRowView)["部门"];
   }
}

C# 如何在dataGridView里设置两个列comboboxcolumn绑定级联事件的一个二级联动效果_第1张图片


  // 构建表格实际数据源

  DataTable dt = new DataTable();
  dt.Columns.Add("c_ID");
  dt.Columns.Add("d_ID");

  for (int i = 0; i < 10; i += 2)
      dt.Rows.Add(new object[] { i, i % 4 });

  dataGridView1.DataSource = dt;
  //先构建第一个联动数据列
  DataTable dt1 = new DataTable();
  dt1.Columns.Add("c_ID");
  dt1.Columns.Add("c_name");

 for (int i = 0; i < 10; i++)
      dt1.Rows.Add(new object[] { i, "公司" + i.ToString() });
  //建立下拉列
 DataGridViewComboBoxColumn cc = new DataGridViewComboBoxColumn();
 cc.DataSource = dt1;
 cc.HeaderText = "公司名称";
 cc.DisplayMember = "c_name";
 cc.ValueMember = "c_ID";
 cc.DataPropertyName = "c_ID";
 dataGridView1.Columns.Add ( cc);


 //构建第二个级联动数据列
 DataTable dt2 = new DataTable();
 dt2.Columns.Add("d_ID");
 dt2.Columns.Add("d_name");

 for (int i = 0; i < 4; i++)
     dt2.Rows.Add(new object[] { i, "部门" + i.ToString() });
 //建立下拉列
 DataGridViewComboBoxColumn c2 = new DataGridViewComboBoxColumn();
 c2.DataSource = dt2;
 c2.HeaderText = "部门";
 c2.DisplayMember = "d_name";
 c2.ValueMember = "d_ID";
 c2.DataPropertyName = "d_ID";
 dataGridView1.Columns.Add( c2);

  //最后隐藏ID列
 dataGridView1.Columns[0].Visible = false;
 dataGridView1.Columns[1].Visible = false;



你可能感兴趣的:(C#,.net,c#,开发语言)