DataGridViewComboBoxCell不更新列表项

时间:2019-08-09 23:21:04

标签: c# datagridview datagridviewcomboboxcell

我正在尝试更新datagridview中组合框中的值。听起来很简单吧。

我在DGV中添加了几行已存在的行,其中2列是下拉列表。 如下代码片段,但列表从未用新类别直观地更新过。 此方法适用于其他独立组合框,但不适用于datagridview中的组合框。

// List<string> _mCategories
_mCategories.Add("new category");
_mCategories.Sort();

for(int i = 0; i < dgv.Rows.Count; i++)
{
    DataGridViewComboBoxCell c1 = dgv.Rows[i].Cells[4] as 
    DataGridViewComboBoxCell;

    c1.Items.Clear();
    c1.Items.AddRange(_mCategory.ToArray());
}

1 个答案:

答案 0 :(得分:0)

我应该为此提供更多信息,而不仅仅是草率的评论

在数据绑定方案中,我将:

  • 创建新的数据集
  • 向其中添加一个表,以保存要在网格中显示的所有数据-示例地址。向其中添加两个int列以进行查找,例如AddressType,其中1将是Work,而2将是Home,而BuildingType,其中1将是“ Apartment Block”等...
  • 再添加两个表,每个表各两列-一列包含要在组合框列表中显示的文本字符串(例如,建筑类型组合中的“ Apartment Block”或地址类型组合中的“ Home”),另一列包含您要存储在主表中的数字(1)。我倾向于将这些列称为Disp和Val,因为组合的DisplayMember属性将设置为文本Disp列,而组合的ValueMember将设置为Val。
  • 保存数据集
  • 在VS中打开数据源窗口
  • 展开数据集节点,将代表主表(地址)的节点拖到表单上
  • 出现一个datagridview,它通过绑定源数据绑定到新的数据集实例(这些组件出现在表单设计器的底部-请参见somedataSet和addressBindingSource)
  • 编辑网格的列,将AddressType列更改为datagridviewcombobox类型
    • DataSource设置为包含组合的显示/值对的表,例如其他>>项目数据源>> DataSetName >> AddressType
    • 将组合的DisplayMember设置为字符串列(Disp)
    • 将组合的ValueMember设置为int列(Val)
    • 检查DataPropertyName属性是否引用了主网格中包含地址类型(AddressType)的列的名称

应该的。您的组合将查询数据集.AddressType表以获取其显示的列表,它将显示Disp的内容,并将使用在Val中找到的值戳入Address.AddressType或Address.BuildingType列(取决于哪个组合是)

向主表中添加一些数据(不要向网格中添加数据;直接将其添加到网格所绑定的数据表中),并向较小的表中添加地址类型/建筑类型的负载

现在,如果您的主表的addresstype列中有1,则该组合将显示“ work”。如果将其更改为“ home”,则主表行将更新为2

我按照视频中的步骤进行操作并进行了录制。在某一点上,您会看到我在表单上单击一个按钮。就是这样,我可以单击一些将要达到断点的东西,然后可以检查数据集的内容并向您展示它的运行方式

https://youtu.be/EuHrIE3-BoE