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

C# C DataGridView使用具体类型时为空,使用匿名类型时显示数据,c#,winforms,linq,.net-4.0,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 som

我试图使用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;
显示了我想要的数据,但我无法添加新项目,存在由匿名类型引起的异常。我知道,这是因为它是匿名类型,没有构造函数

问题是,当我使用与匿名类型相同的类型(甚至名称)创建一个具体类时,只需通过new 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;
不显示任何内容,即使列表中有项目,并且数据源已设置为列表。我不知道为什么会发生这种情况,也许我忽略了一些非常非常简单的事情,但我看不出问题来自何方


任何帮助都会很棒。

将类更改为使用属性,datagridview将显示列表

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

尝试设置GridView.DataMember=您的类名。AutoGenerateColumns属性是否设置为true?ClassName类中是否确实有属性?简单的公共字段不起作用。@xeondev谢谢,我在一个barebones类中使用了公共字段,将其更改为实际属性并修复了它。Thanks@ThomasG作为答案添加,如果适用于您,请接受: