DataGridView不显示我的列表

时间:2013-08-13 15:25:05

标签: c# winforms list datagridview

虽然这个网站上有很多关于用对象填充gridview的帖子,但我无法让它工作。

我有一个名为Logs的类,有3个公共属性 - 时间,描述和错误。 还有一个名为logList的公共属性,它将返回一个Logs对象列表。

我的WinForm中有DataGridView,名为myGV,有3列名为Time,Description和Error。

所以我在尝试:

myGV.DataSource = Logs.logList.OrderBy(x => x.Time);

但我的DataGridView什么都不显示,即使logList确实包含数据。

感谢您在本网站的工作!

更新: 如果我从myGV中删除所有列,它会显示数据。那么如何将静态列与我的对象列表中的属性相匹配?

3 个答案:

答案 0 :(得分:3)

手动添加列后,您必须确保更新每个列的DataPropertyName

  • 单击DataGridView顶部的小箭头,显示Control的任务。 enter image description here
  • 点击修改列
  • 对于每个列,找到属性DataPropertyName并将其更改为DateErrorDescription以及您用于列的其他名称。 enter image description here

确保这些内容与您的日志类中的Properties匹配。

enter image description here

答案 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添加的列将超出您的预期。例如,假设您在设计时添加了所有DataGridViewTimeDescription,而未指定任何ErrorDataPropertyName(默认情况下),如果您指定如上yourDataGridView.AutoGenerateColumns = true的{​​{1}},您的DataSource可能只有6列,而不是3.因此,您可以在分配之前分配已添加列的DataGridViewDataGridView的{​​{1}},如下所示:

DataPropertyName

我建议您设置DataSource(默认情况下)并删除所有添加的列,只需让DataGridView自动生成列。

答案 2 :(得分:0)

OrderBy()返回IOrderedEnumerable<>数据类型,不能绑定到DataGridView。 所以你必须将它们转换为绑定源。 使用ToList()方法之类的 “OrderBy()。ToList()”来绑定你的gridview。     dataGridView1.DataSource = studList.OrderBy(a => a.Age).ToList();

它正在发挥作用 Screenshot

有关绑定DataGridView的更多信息,请访问dataGridView binding