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)

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

       }
       }

     }

它运作良好。当我从特定行中的第一个组合框列中选择类别时,此选定类别的相关子类别将绑定到同一行中的子类别列。它很好,但问题是,在特定行之前的第二个组合框列也与相同的子类别绑定

例如

如果我从第三行第一个组合框列中选择类别,那么它的子类别也绑定在第一行第二行和第三行中。我只想将它绑定到第三行。

请任何人帮助我,我遇到了这个问题..

4

1 回答 1

1

您正在更改整个列的 DataSource。相反,仅为单元格更改 DataSource。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 成员,告诉它如何填充下拉列表(您也可以通过 Items 成员填充下拉列表,但这与您的问题无关)。当 DGV 填充下拉列表时,它首先查看单元格的 DataSource 成员。如果它为空(默认为空),则它会查找其 DataSource 成员的 OwningColumn(对于 aDataGridViewComboBoxCell始终是 a DataGridViewComboBoxColumn)。

这就是您要更改的内容,列的 DataSource 成员。所以该列中的所有单元格都将更改为这个新的数据源。您想要的只是更改该特定单元格的数据源。

于 2012-09-09T18:04:47.480 回答