【问题标题】:DataGridView with DataSource inheritance具有 DataSource 继承的 DataGridView
【发布时间】:2012-09-05 15:23:13
【问题描述】:

我正在尝试创建 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;
  }
}

【问题讨论】:

  • 请提供一些相关代码以明确问题..您尝试了什么以及导致错误的代码..
  • @Niranjan Kala 为我的 DataElements 属性添加了代码。

标签: winforms inheritance datagridview generic-list


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 2011-09-12
    • 2020-05-17
    • 2012-11-30
    • 2015-10-01
    • 1970-01-01
    相关资源
    最近更新 更多