1

我正在尝试创建 WinForms DataGridView (ElementDataGrid) 的扩展版本以允许排序和过滤。由于这将是多个开发人员使用的小部件,因此我想在内部隐藏 SortableBindingList 类,并让用户只传入一个普通的 List,控件创建 SortableBindingList。

我创建了一个名为 Element 的基类,其他开发人员可以对其进行扩展,但是当我将列的 DataPropertyName 设置为不在 Element 中的属性时,该列中没有显示任何内容。例如,我有一个继承自 Element 的 Comment 类。我想在数据网格中显示评论日期和评论文本。这些列中都没有任何数据,但使用从 Element 继承的属性的列正确显示。

有没有一种简单的方法可以让网格显示继承自 Element 基类的类的属性值?或者,有没有办法让该属性采用通用列表?

更新:这是我用来将数据源设置为我的 SortableBindingList 的方法。正如我所说,当我想显示来自 Element 的属性时,它们会被填充到网格中,但继承自 Element 的 Comment 中的属性却不是。

public List<Element> DataElements
{
  set
  {
    bindingDataSource.Clear();

    SortableBindingList<Element> boundDataSource = new SortableBindingList<Element>();
    bindingDataSource.DataSource = boundDataSource;

    foreach (Element e in value)
    {
      bindingDataSource.Add(e);
    }

    this.DataSource = bindingDataSource;
  }
}
4

1 回答 1

1

看看 Marc Gravell 对这个 SO question的回答。假设,正如他在回答中所说,数据是同质的(意味着您没有在元素列表中混合 Comments 和 SomeOtherClass)并且其中至少有一个元素(以便它能够推断出列表中数据的实际类型),我认为它适用于您的情况。

于 2012-09-05T16:49:45.203 回答