【问题标题】:Winforms DataGridView columns from datasourceWinforms DataGridView 来自数据源的列
【发布时间】: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; }
    }
}

我收集了这些对象,并将此集合设置为 DataSourceDataGridView。然后,DataGridView 的列将由Base 类的属性(IDName.Description)创建。有什么方法可以反映具体的实现属性吗?

    List<Base> items = new List<Base>();
    DataGridView dgv = new DataGridView();
    dgv.DataSource = new BindingList<Base>(items);

在这种情况下,我还想要B 类的ExtraInfo 属性列。

【问题讨论】:

  • 如果源中只包含B类型的对象,则绑定BindingList&lt;B&gt;
  • 好吧,我忘了说我不知道​​编译时对象的类型。我需要这样 (List&lt;Base&gt;)
  • 那么您将只获得Base 属性。 WF 数据绑定使用来自IList&lt;T&gt; 实现的静态类型信息来提取属性(因此是列) - 它不检查列表元素的实际类型。这是正确的行为 - 如果您的列表包含 A 实例,ExtraInfo 将为他们显示什么。

标签: c# winforms data-binding datagridview


【解决方案1】:

也继承类 B:

public 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; }
    }
}

【讨论】:

  • 抱歉,我已经解决了这个问题。不幸的是,这不是问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 2011-01-02
  • 1970-01-01
  • 2011-12-18
  • 2020-06-25
  • 1970-01-01
相关资源
最近更新 更多