【问题标题】:Bind List of Classes into DataGridView将类列表绑定到 DataGridView
【发布时间】:2011-05-07 19:33:29
【问题描述】:

我需要将List<MyClass> myList 绑定到DataGridView。并进入包含两列 ID 和 Name 的结果表。

代码sn-ps:

private List<MyClass> myList = new List<MyClass>(){...};

public void BindClass()
{
    dataGridView.DataSource = myList;
}

public MyClass
{
   public MyDataClass Data{ get; set; }
}

public MyDataClass
{
   public string ID { get; set; }
   public string Name { get; set; }
}

有可能吗?

【问题讨论】:

  • 你刚刚问了一个确切的问题。删除这个。并根据需要编辑前一个。编辑:我看到你确实删除了前一个。这不是正确的方法,因为每个试图帮助你的人,现在都没有答案了。
  • 对不起..上一个问题不正确..
  • 是的,我无缘无故投了反对票,而你删除了问题。

标签: c# winforms data-binding datagridview


【解决方案1】:

绑定到匿名类型怎么样:

public void BindClass() 
{
    dataGridView1.DataSource = myList.Select(myClass => new {myClass.Data.ID, myClass.Data.Name}).ToList();
}

您会更新 datagridview 中的数据吗?

【讨论】:

  • 哇,非常优雅的解决方案!谢谢!
  • 是的,我会更新。我们应该做什么 ? (供其他用户进一步参考。)
【解决方案2】:

在不更改模型的情况下做到这一点异常很棘手(但可能),需要ICustomTypeDescriptorTypeDescriptionProvider,以及自定义PropertyDescriptor。老实说:不值得。

只需添加 pass-thru 属性:

public MyClass
{
   public MyDataClass Data{get; set;}
   [DisplayName("ID")]
   public string DataID {
     get {return Data.ID;}
     set {Data.ID = value;}
   }
   [DisplayName("Name")]
   public string DataName {
     get {return Data.Name;}
     set {Data.Name = value;}
   }
}

【讨论】:

  • 是的,这个解决方案发生了:)
  • 嗯,我从没想过直接通过 TypeDescriptor 来做这件事,它可能比我采用的 BindingSource 路线要容易一些:)
  • @leppie - 不过它仍然是相当先进的东西
  • 特别是处理递归数据和 1000 个属性的结果集。我不得不将嵌套限制为 6 层和 600 层,以防止 DataGridView 设计器崩溃。显然,它不喜欢超过 650 列(有趣的是,造成这种限制的是填充因子,100 * 660 > 0xffff)。
【解决方案3】:

正如您在 This answer 中看到的那样,使用 LINQ 很容易

这是我需要附加到 datagridview 的简单实现。

     DataGridView1.DataSource =  _
(From i In ItemList Select i.ListID, i.FullName, i.PurchaseDesc, i.EditSequence).ToList

【讨论】:

    【解决方案4】:

    不,您不能开箱即用。您将不得不编写一个自定义绑定源(很可能为您的特定目的使用专门的逻辑)以允许“钻取”比仅仅 1 级属性更深。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-17
      • 2014-08-18
      • 2010-11-16
      相关资源
      最近更新 更多