【发布时间】:2017-06-27 11:13:10
【问题描述】:
我有基类和一些继承类,像这样:
public abstract class Base
{
public long ID { get; set; }
public string Name { get; set; }
public virtual string Description { get { return "Base"; } }
}
public class A : Base
{
public override string Description { get { return "A"; } }
}
public class B : Base
{
private string extraInfo;
public override string Description { get { return "B"; } }
public string ExtraInfo
{
get { return extraInfo; }
set { extraInfo = value; }
}
}
我收集了这些对象,并将此集合设置为 DataSource 或 DataGridView。然后,DataGridView 的列将由Base 类的属性(ID、Name.Description)创建。有什么方法可以反映具体的实现属性吗?
List<Base> items = new List<Base>();
DataGridView dgv = new DataGridView();
dgv.DataSource = new BindingList<Base>(items);
在这种情况下,我还想要B 类的ExtraInfo 属性列。
【问题讨论】:
-
如果源中只包含
B类型的对象,则绑定BindingList<B>。 -
好吧,我忘了说我不知道编译时对象的类型。我需要这样 (
List<Base>) -
那么您将只获得
Base属性。 WF 数据绑定使用来自IList<T>实现的静态类型信息来提取属性(因此是列) - 它不检查列表元素的实际类型。这是正确的行为 - 如果您的列表包含A实例,ExtraInfo将为他们显示什么。
标签: c# winforms data-binding datagridview