c# - DataGridView 不显示我的列表

标签 c# winforms list datagridview

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

我有一个名为 Logs 的类,它具有 3 个公共(public)属性 - Time、Description 和 Error。 还有一个名为 logList 的公共(public)属性,它将返回一个日志对象列表。

我的 WinForm 中有 DataGridView,称为 myGV,有 3 列,分别称为时间、描述和错误。

所以我正在尝试:

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

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

感谢您在此网站上所做的工作!

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

最佳答案

你说的很奇怪如果我从 myGV 中删除所有列,它会显示数据...。我重现了您的问题,原因是您的 LINQ 查询未执行。在将结果用作 DataGridViewDataSource 之前,您必须调用 ToList() 或类似方法:

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

当然,如果您的静态列没有与 DataSource 的属性相匹配的 DataPropertyName,添加到您的 DataGridView 的列将比您预期的多。例如,假设所有 TimeDescriptionError 都是在设计时添加的,而没有分配任何 DataPropertyNameyourDataGridView.AutoGenerateColumns = true(默认情况下),如果您如上所述分配 DataGridViewDataSource,您的 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 自动为您生成列。

关于c# - DataGridView 不显示我的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18213154/

相关文章:

c# - WebBrowser 控件 IE8 兼容模式开/关开关

c# - 我尝试在数组中找到最近的 double

vb.net - 多个面板和组框以及选项卡顺序维护

PHP 等同于 JavaScript 中的列表和 explode

java - Java8 中带有流的嵌套列表

python - 从列表列表中随机选择 X 个列表

c# - 将不一致的json反序列化为对象c#

c# - 为 osx 创建安装程序时合并 Mono 失败

c# - 使用 GDI+ 绘制内容时如何使用 AutoScrollbar

c# - 防止类被实例化