使用具体类型时C#DataGridView为空,使用匿名类型时显示数据

时间:2012-09-25 10:33:30

标签: c# winforms linq .net-4.0

我正在尝试使用DataGridView进行显示,但我得到了一些奇怪的结果。

当我使用匿名类型设置数据源时,如下所示:

var displayList = CreateAnAnonymousBindingList(new { prop1 = string. Empty ...etc... } );
displayList.AllowNew = true; //The property in the DataGridView is set in the designer

var list = from someEntity in entities.EntityGroup //I want some of the fields from each entity
           select new { prop1 = someEntity.prop1...etc...};

foreach(item in list)
{
   displayList.add(item);
}

form.dataGridView.DataSource = displayList;

显示我想要的数据,但我无法添加新项目,匿名类型导致异常。我知道,这是因为它是一个匿名类型,没有构造函数。

问题是,当我创建一个使用相同类型的具体类,甚至是匿名类型的名称时,创建一个BindingList(只需通过新的BindingList())并向其添加项目,如:

BindingList<ClassName> displayList = new BindingList<ClassName>();
displayList.AllowNew = true;

var list = from someEntity in entities.EntityGroup
          select someEntity;

foreach(var item in list)
{
   ClassName temp = new ClassName();
   /* Assign all the properties I want*/
   displayList.Add(temp);
}

form.dataGridView.DataSource = displayList;

即使列表中包含项目,并且数据源设置为列表,也不会显示任何内容。我无法理解为什么会发生这种情况,也许我忽略了一些非常非常简单的事情,但我无法看到问题的来源。

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

更改您的班级以使用属性,datagridview将显示列表。

class ClassName
{
    public string ID { get; set; }
    public string Name { get; set; }
}