Data binding 数据绑定到DataGridView(枚举+集合)

Data binding 数据绑定到DataGridView(枚举+集合),data-binding,datagridview,c#-2.0,Data Binding,Datagridview,C# 2.0,我想要一些关于数据绑定技术的帮助。我已经有一段时间没有使用任何合适的数据绑定了,我想尝试使用DataGridView做一些事情。我正在尝试尽可能多地进行配置,以便可以通过表单编辑器简单地设计DatagridView,然后使用一个公开所有信息的自定义类 我得到的信息如下: public class Result { public String Name { get; set; } public Boolean PK { get; set; } public MyEnum Enum

我想要一些关于数据绑定技术的帮助。我已经有一段时间没有使用任何合适的数据绑定了,我想尝试使用DataGridView做一些事情。我正在尝试尽可能多地进行配置,以便可以通过表单编辑器简单地设计DatagridView,然后使用一个公开所有信息的自定义类

我得到的信息如下:

public class Result
{
   public String Name { get; set; }
   public Boolean PK { get; set; }
   public MyEnum EnumValue { get; set; }
   public IList<ResultInfos> { get; set; }
}

public class ResultInfos { get; set; }
{
   public class Name { get; set; }
   public Int Value { get; set; }
   public override String ToString() { return Name + " : " Value.ToString(); }
}
我可以毫无问题地绑定到简单的信息。我想用DataGridViewComboBoxColumn绑定到EnumValue,但是当我设置DataPropertyName时,会出现异常,说enum值无效

然后是ResultInfo集合。目前,我不知道如何绑定到这个并显示我的项目,我真的希望这是一个组合框,其中第一个项目被选中。有人对我做错了什么有什么建议吗

谢谢

在将数据绑定到网格之前,请先将DataGridViewComboBoxColumn.DataSource设置为如下

combo.DataSource=Enum.GetValuestypeofYourEnum

我通常在初始化Component之后在构造函数中执行此操作。设置好后,在绑定数据时,不会从combo列中获得异常。您可以在设计时将DataGridViewComboxColumn.DataPropertyName设置为正常

在没有此步骤的情况下绑定时出现异常的原因是单元格试图从列表中选择与项上的值匹配的值。由于列表中没有值。。。它会引发异常。

在将数据绑定到网格之前,请先将DataGridViewComboBoxColumn.DataSource设置为如下所示

combo.DataSource=Enum.GetValuestypeofYourEnum

我通常在初始化Component之后在构造函数中执行此操作。设置好后,在绑定数据时,不会从combo列中获得异常。您可以在设计时将DataGridViewComboxColumn.DataPropertyName设置为正常


在没有此步骤的情况下绑定时出现异常的原因是单元格试图从列表中选择与项上的值匹配的值。由于列表中没有值。。。它抛出了一个异常。

Preston,感谢您的反馈。这为enum整理了数据源,这很好。虽然我对IList也有类似的问题,并且希望能够通过绑定显示这些问题,但是很明显,每行的数据源都不同。有没有一种方法可以在不在运行时进行定义的情况下进行定义?是否尝试在组合框中将列表的内容显示为项目?如果是这样,我想不出一个好的设计时解决方案。但您可以在运行时执行此操作。列中的每个DataGridViewComboxCell都有自己的DataSource属性。因此,您不会在该列上设置DataPropertyName值。而是在数据绑定后遍历单元格,并将每个单元格上的DataSouce设置为行ResultDataBoundItem上的列表。我想你可以将单元格上的值设置为列表中的第一项或其他内容。普雷斯顿,谢谢你的反馈。这为enum整理了数据源,这很好。虽然我对IList也有类似的问题,并且希望能够通过绑定显示这些问题,但是很明显,每行的数据源都不同。有没有一种方法可以在不在运行时进行定义的情况下进行定义?是否尝试在组合框中将列表的内容显示为项目?如果是这样,我想不出一个好的设计时解决方案。但您可以在运行时执行此操作。列中的每个DataGridViewComboxCell都有自己的DataSource属性。因此,您不会在该列上设置DataPropertyName值。而是在数据绑定后遍历单元格,并将每个单元格上的DataSouce设置为行ResultDataBoundItem上的列表。我想您可以将单元格上的值设置为列表中的第一项或其他内容。