2012-09-07 155 views
1

我有一个包含2个组合框的数据网格。我写了如下所示的组合框列的选择更改事件。DataGridView ComboBox列选择已更改事件

private void Grid_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
{ 
    ComboBox cb = e.Control as ComboBox; 
       if (cb!=null) 
       { cb.SelectionChangeCommitted -= new EventHandler(cb_SelectedIndexChanged); 

        // now attach the event handler 
        cb.SelectionChangeCommitted += new EventHandler(cb_SelectedIndexChanged); 
       } 
} 

void cb_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     var tb = datagrdADDTEMP.EditingControl as ComboBox; 
     if (tb != null) 
     str = tb.SelectedValue != null ? tb.SelectedValue.ToString() : null; 
        Assesment_Business_layer.Businesslayer bl = new Assesment_Business_layer.Businesslayer(); 
        DataSet ds = new DataSet();**strong text** 
        ds = bl.GetSubCatNamesBA(str); 
        cmbDataGridSubCategory.DataSource = ds.Tables[0]; 
        cmbDataGridSubCategory.DisplayMember = "SubCategoryName"; 
        cmbDataGridSubCategory.ValueMember = "SubCategoryCode"; 
       } 
    } 

与第一组合框列的工作很好,但问题是当我从第二个组合框中选择项目column..but我不想提高选择改变事件上述选择改变的事件也被提高为第二个组合列。它应该只为第一个组合框提高。

请大家帮忙,因为我很困扰这个问题。

回答

2

问题似乎是您将事件处理程序添加到任何组合框中,不管它是什么列,因此您必须首先在事件触发的列中找到,因此您必须查看Grid_EditingControlShowing事件处理程序(它是DataGridView)的发件人对象及其CurrentCell,SelectedColumns或SelectedCells属性。

例子:

private void Grid_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
{ 
    if(((DataGridView)sender).CurrentCell.ColumnIndex == 0) //Assuming 0 is the index of the ComboBox Column you want to show 
    { 
     ComboBox cb = e.Control as ComboBox; 
     if (cb!=null) 
     { 
      cb.SelectionChangeCommitted -= new EventHandler(cb_SelectedIndexChanged); 
      // now attach the event handler 
      cb.SelectionChangeCommitted += new EventHandler(cb_SelectedIndexChanged); 
     } 
    } 
} 

使用SelectedColumns或了selectedCells,将是非常喜欢这一点,如果你想了解有关的属性,你可以在他们documentation on MSDN

+0

请你能解释一下看看更多信息的一个例子我带一个示例代码。 – sree

相关问题