将类列表绑定到DataGridView中

时间:2010-11-10 10:45:16

标签: c# winforms data-binding datagridview

我需要将List<MyClass> myList绑定到DataGridView。并在结果表中输入两列ID和名称。

代码段:

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

有可能吗?

4 个答案:

答案 0 :(得分:17)

如何绑定到匿名类型:

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

您是否会更新datagridview中的数据?

答案 1 :(得分: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;}
   }
}

答案 2 :(得分:1)

This answer

中可以看到LINQ很容易

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

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

答案 3 :(得分:0)

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