C# DataGridView不显示我的列表
虽然这个网站上有很多关于用对象填充gridview的帖子,但我无法让它工作 我有一个名为Logs的类,它有3个公共属性-时间、描述和错误。 还有一个名为logList的公共属性,它将返回日志对象列表 我的WinForm中有DataGridView,名为myGV,有3列,分别为Time、Description和Error 所以我试着:C# DataGridView不显示我的列表,c#,winforms,list,datagridview,C#,Winforms,List,Datagridview,虽然这个网站上有很多关于用对象填充gridview的帖子,但我无法让它工作 我有一个名为Logs的类,它有3个公共属性-时间、描述和错误。 还有一个名为logList的公共属性,它将返回日志对象列表 我的WinForm中有DataGridView,名为myGV,有3列,分别为Time、Description和Error 所以我试着: myGV.DataSource = Logs.logList.OrderBy(x => x.Time); 但我的DataGridView没有显示任何内容,即
myGV.DataSource = Logs.logList.OrderBy(x => x.Time);
但我的DataGridView没有显示任何内容,即使日志列表中确实包含数据
感谢您在此网站上的工作
更新:
如果我从myGV中删除所有列,它将显示数据。那么,如何将静态列与我的对象列表中的属性相匹配?手动添加列后,必须确保更新其中每个列的
DataPropertyName
:
- 单击DataGridView顶部的小箭头以显示控件的任务。
- 单击编辑列
- 对于每个列,找到属性
,并将其更改为DataPropertyName
、Date
和Error
以及您为列使用的任何其他名称。Description
属性相匹配
手动添加列后,必须确保更新每个列的DataPropertyName
:
- 单击DataGridView顶部的小箭头以显示控件的任务。
- 单击编辑列
- 对于每个列,找到属性
DataPropertyName
,并将其更改为Date
、Error
和Description
以及您为列使用的任何其他名称。
确保这些属性与Logs类中的属性相匹配
奇怪的是,你说如果我从myGV中删除所有列,它会显示数据…
。我重现了您的问题,原因是您的LINQ
查询未执行。在将结果用作DataGridView
的DataSource
之前,必须调用ToList()
或类似方法:
myGV.DataSource = Logs.logList.OrderBy(x => x.Time).ToList();
当然,如果静态列没有与数据源的属性匹配的DataPropertyName
,那么将有更多的列添加到DataGridView
中。例如,假设所有的时间
、描述
和错误
都是在设计时添加的,而没有分配任何DataPropertyName
和yourDataGridView.AutoGenerateColumns=true
(默认情况下),如果您如上分配DataGridView
的数据源
,您的DataGridView
可能总共有6列,而不是3列。因此,在为DataGridView
分配DataSource
之前,您可以为添加的列分配DataPropertyName
,如下所示:
myGV.Columns["Time"].DataPropertyName = "Time";
myGV.Columns["Description"].DataPropertyName = "Description";
myGV.Columns["Error"].DataPropertyName = "Error";
myGV.DataSource = Logs.logList.OrderBy(x => x.Time).ToList();//This should be called at here after all the DataPropertyNames are initialized.
我建议您设置myGV.AutoGenerateColumns=true
(默认设置)并删除所有添加的列,只需让DataGridView
为您自动生成列即可 奇怪的是,你说如果我从myGV中删除所有列,它会显示数据…
。我重现了您的问题,原因是您的LINQ
查询未执行。在将结果用作DataGridView
的DataSource
之前,必须调用ToList()
或类似方法:
myGV.DataSource = Logs.logList.OrderBy(x => x.Time).ToList();
当然,如果静态列没有与数据源的属性匹配的DataPropertyName
,那么将有更多的列添加到DataGridView
中。例如,假设所有的时间
、描述
和错误
都是在设计时添加的,而没有分配任何DataPropertyName
和yourDataGridView.AutoGenerateColumns=true
(默认情况下),如果您如上分配DataGridView
的数据源
,您的DataGridView
可能总共有6列,而不是3列。因此,在为DataGridView
分配DataSource
之前,您可以为添加的列分配DataPropertyName
,如下所示:
myGV.Columns["Time"].DataPropertyName = "Time";
myGV.Columns["Description"].DataPropertyName = "Description";
myGV.Columns["Error"].DataPropertyName = "Error";
myGV.DataSource = Logs.logList.OrderBy(x => x.Time).ToList();//This should be called at here after all the DataPropertyNames are initialized.
我建议您设置myGV.AutoGenerateColumns=true
(默认设置)并删除所有添加的列,只需让DataGridView
为您自动生成列即可 OrderBy()返回不可绑定到DataGridView的IOrderedEnumerable类型的数据。
因此,您必须将它们强制转换到绑定源。
使用ToList()方法,如
“OrderBy().ToList()”来绑定gridview。
dataGridView1.DataSource=studList.OrderBy(a=>a.Age.ToList()代码>
它正在工作
有关绑定DataGridView的更多信息,请访问OrderBy()返回无法绑定到DataGridView的IORDerenumerable类型的数据。
因此,您必须将它们强制转换到绑定源。
使用ToList()方法,如
“OrderBy().ToList()”来绑定gridview。
dataGridView1.DataSource=studList.OrderBy(a=>a.Age.ToList()代码>
它正在工作
有关绑定DataGridView的更多信息,请访问您的列是如何“调用”的?另外,您使用的是WinForms还是WPF?列的“名称”属性设置为时间、说明和错误。您的日志列表是什么类型?它是一个列表、数组等吗。。。?(更好的是,你能发布你的日志类吗?)看看这个例子,如果它能帮助你以不同的方式设置绑定:(看看Jared的答案)你的列是如何被称为什么的?还有,你是在使用WinForms还是WPF?列的'Name'属性设置为Time、Description和Error。你的日志列表是什么类型的?它是一个列表、数组等吗。。。?(更好的是,你能发布你的日志类吗?)看看这个例子,如果它能帮助你设置b