【问题标题】:Databinding to the DataGridView (Enums + Collections)数据绑定到 DataGridView(枚举 + 集合)
【发布时间】:2010-05-04 14:54:33
【问题描述】:

我正在寻求一些关于数据绑定技术的帮助。自从我使用任何适当的数据绑定并想尝试对 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 时,我收到异常说枚举值无效。

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

谢谢

【问题讨论】:

    标签: data-binding datagridview c#-2.0


    【解决方案1】:

    将数据绑定到网格之前,首先像这样设置 DataGridViewComboBoxColumn.DataSource...

    combo.DataSource = Enum.GetValues(typeof(YourEnum));

    我通常在 InitializeComponent() 之后的构造函数中执行此操作。设置完成后,当您绑定数据时,您将不会从组合列中获得异常。您可以像往常一样在设计时设置 DataGridViewComboBoxColumn.DataPropertyName。

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

    【讨论】:

    • 普雷斯顿,感谢您的反馈。这为枚举整理了 DataSource,这很棒。我对 IList 有类似的问题,并且希望能够通过绑定显示这些问题,但显然每行的数据源都不同。有没有一种方法可以在运行时不做定义?
    • 您是否试图将列表的内容显示为组合框中的项目?如果是这样,我想不出一个好的设计时解决方案。但是您可以在运行时执行此操作。列中的每个 DataGridViewComboBoxCell 都有自己的 DataSource 属性。因此,您不会在该列上设置 DataPropertyName 值。而是在数据绑定后循环遍历单元格,并将每个单元格上的 DataSouce 设置为行 (Result)DataBoundItem 上的列表。我想您可以将单元格上的值设置为列表中的第一项或其他内容。
    猜你喜欢
    • 2011-11-05
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多