Winforms 具有数据源继承的DataGridView

Winforms 具有数据源继承的DataGridView,winforms,inheritance,datagridview,generic-list,Winforms,Inheritance,Datagridview,Generic List,我正在尝试创建WinForms DataGridView(ElementDataGrid)的扩展版本,以允许排序和筛选。由于这将是一个由多个开发人员使用的小部件,因此我希望在内部隐藏SortableBindingList类,并让用户通过创建SortableBindingList的控件传入一个普通列表 我创建了一个名为Element的基类,其他开发人员可以对其进行扩展,但当我将列的DataPropertyName设置为不在元素中的属性时,该列中不会显示任何内容。例如,我有一个从元素继承的注释类。我

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

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

有没有一种简单的方法可以让网格显示从元素基类继承的类的属性值?或者,是否有一种方法可以让属性获取通用列表

更新:下面是我用来将数据源设置为我的SortableBindingList的方法。正如我所说的,当我想显示元素的属性时,元素的属性会被填充到网格中,但从元素继承的注释属性则不会

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;
  }
}
公共列表数据元素
{
设置
{
bindingDataSource.Clear();
SortableBindingList boundDataSource=新的SortableBindingList();
bindingDataSource.DataSource=boundDataSource;
foreach(值中的元素e)
{
bindingDataSource.Add(e);
}
this.DataSource=bindingDataSource;
}
}

看看Marc Gravell的答案。假设,正如他在回答中所说的,数据是同质的(意思是在元素列表中没有混合注释和其他类),并且其中至少有一个元素(以便它能够推断列表中数据的实际类型),我认为这对你的情况是有效的。

看看马克·格雷威尔的答案。假设,正如他在回答中所说的,数据是同质的(意思是在元素列表中没有混合注释和其他类),并且其中至少有一个元素(以便它能够推断列表中数据的实际类型),我认为这对您的情况很有用。

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