1

2つのコンボボックス列を持つデータグリッドがあります。最初の列はカテゴリ列で、2番目の列はサブカテゴリ列です。ここで、最初のコンボボックス列でカテゴリを選択する必要があります。次に、この選択したカテゴリに含まれるサブカテゴリを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)

     {
       int i = datagrdADDTEMP.CurrentCell.ColumnIndex;
       int j = datagrdADDTEMP.CurrentCell.RowIndex;
       if(i==0)
       {

       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番目のコンボボックス列も同じサブカテゴリにバインドされていることです。

例えば

3行目の最初のコンボボックス列からカテゴリを選択した場合、そのサブカテゴリは1行目2行目と3行目でもバインドされます。jusは3行目のみにバインドしたいと考えています。

誰か助けてください、私はこの問題に悩まされています。

4

1 に答える 1

1

列全体のデータソースを変更します。代わりに、セルのデータソースのみを変更してください。DataGridViewComboBoxCell独自のDataSourceメンバーが含まれ、nullの場合はOwningColumnのDataSourceを使用します。

更新しました

それ以外の

cmbDataGridSubCategory.DataSource = ds.Tables[0];
cmbDataGridSubCategory.DisplayMember = "SubCategoryName";
cmbDataGridSubCategory.ValueMember = "SubCategoryCode";

使用する

// Retrieve the individual sub-category cell
DataGridViewComboBoxCell subComboCell = (DataGridViewComboBoxCell)datagrdADDTEMP.Rows[j].Cells[cmbDataGridSubCategory.Index];
// Alter its DataSource
subComboCell.DataSource = ds.Tables[0];
subComboCell.DisplayMember = "SubCategoryName";
subComboCell.ValueMember = "SubCategoryCode";

DGVは、セルのグリッドです(から派生DataGridViewCell)。これらの各セルには、その列のタイプに基づいた特定のタイプDataGridViewColumnがあります。したがって、がある場合DataGridViewComboBoxColumn、その列のすべてのセルはDataGridViewComboBoxCellsです。

コンボボックスセルには、ドロップダウンにデータを入力する方法を指示するDataSourceメンバーがあります(アイテムメンバーからドロップダウンにデータを入力することもできますが、問題には関係ありません)。DGVがドロップダウンにデータを入力すると、最初にセルのDataSourceメンバーを調べます。null(デフォルト)の場合、そのDataSourceメンバーのOwningColumn(aのDataGridViewComboBoxCell場合は常に)を検索します。DataGridViewComboBoxColumn

これが、列のDataSourceメンバーである変更したものです。したがって、その列のすべてのセルがこの新しいデータソースに変更されます。必要なのは、その特定のセルのデータソースだけを変更することです。

于 2012-09-09T18:04:47.480 に答える