1

2つのコンボボックス列を持つデータグリッドがあります。コンボボックス列の選択変更イベントを次のように記述しました。

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";
                 }
     }

最初のコンボボックス列ではうまく機能しますが、問題は、2番目のコンボボックス列からアイテムを選択しているときに上記の選択変更イベントも発生することです。しかし、2番目のコンボ列の選択変更イベントを発生させたくありません。最初のコンボボックスでのみ発生するはずです。

私はこの問題で立ち往生しているので助けてください。

4

1 に答える 1

3

問題は、イベント ハンドラーを任意のコンボ ボックスに追加しているようです。それがどの列であるかは関係ありません。そのため、イベントがトリガーされた列を最初に見つける必要があります。これには、sender オブジェクトを確認する必要があります。 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 を使用した例は、次のようになります。そのプロパティに関する詳細情報が必要な場合は、MSDN のドキュメントを参照してください。

于 2012-09-07T18:29:25.163 に答える