虽然这个网站上有很多关于用对象填充gridview的帖子,但我无法让它工作。
我有一个名为Logs的类,有3个公共属性 - 时间,描述和错误。 还有一个名为logList的公共属性,它将返回一个Logs对象列表。
我的WinForm中有DataGridView,名为myGV,有3列名为Time,Description和Error。
所以我在尝试:
myGV.DataSource = Logs.logList.OrderBy(x => x.Time);
但我的DataGridView什么都不显示,即使logList确实包含数据。
感谢您在本网站的工作!
更新: 如果我从myGV中删除所有列,它会显示数据。那么如何将静态列与我的对象列表中的属性相匹配?
答案 0 :(得分:3)
手动添加列后,您必须确保更新每个列的DataPropertyName
:
DataPropertyName
并将其更改为Date
,Error
和Description
以及您用于列的其他名称。
确保这些内容与您的日志类中的Properties
匹配。
答案 1 :(得分:3)
你说 If I remove all columns from myGV it does display data...
很奇怪。我重现了您的问题,原因是您的LINQ
查询未执行。在将结果用作ToList()
的{{1}}之前,您必须致电DataSource
或类似方法:
DataGridView
当然,如果您的静态列没有myGV.DataSource = Logs.logList.OrderBy(x => x.Time).ToList();
与DataSource的属性匹配,则DataPropertyName
添加的列将超出您的预期。例如,假设您在设计时添加了所有DataGridView
,Time
和Description
,而未指定任何Error
和DataPropertyName
(默认情况下),如果您指定如上yourDataGridView.AutoGenerateColumns = true
的{{1}},您的DataSource
可能只有6列,而不是3.因此,您可以在分配之前分配已添加列的DataGridView
您DataGridView
的{{1}},如下所示:
DataPropertyName
我建议您设置DataSource
(默认情况下)并删除所有添加的列,只需让DataGridView
自动生成列。
答案 2 :(得分:0)
OrderBy()返回IOrderedEnumerable<>数据类型,不能绑定到DataGridView。
所以你必须将它们转换为绑定源。
使用ToList()方法之类的
“OrderBy()。ToList()”来绑定你的gridview。
dataGridView1.DataSource = studList.OrderBy(a => a.Age).ToList();
它正在发挥作用
有关绑定DataGridView的更多信息,请访问dataGridView binding