C# C DataGridView使用具体类型时为空,使用匿名类型时显示数据
我试图使用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
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作为答案添加,如果适用于您,请接受: