gpt4 book ai didi

c# - DataGridView 不显示我的列表

转载 作者:太空宇宙 更新时间:2023-11-03 19:14:21 25 4
gpt4 key购买 nike

虽然这个网站上有很多关于用对象填充 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com