2012-09-07 184 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

相關問題