我需要将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; }
}
有可能吗?
答案 0 :(得分:17)
如何绑定到匿名类型:
public void BindClass()
{
dataGridView1.DataSource = myList.Select(myClass => new {myClass.Data.ID, myClass.Data.Name}).ToList();
}
您是否会更新datagridview中的数据?
答案 1 :(得分:2)
要在不更改模型的情况下执行此操作异常棘手(但可能),需要ICustomTypeDescriptor
或TypeDescriptionProvider
以及自定义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)
这是我需要附加到datagridview的简单实现。
DataGridView1.DataSource = _
(From i In ItemList Select i.ListID, i.FullName, i.PurchaseDesc, i.EditSequence).ToList
答案 3 :(得分:0)
不,你不能开箱即用。您将不得不编写一个自定义绑定源(最有可能为您的特定目的使用专门的逻辑),以允许“钻取”深度不仅仅是1级属性。