【问题标题】:Datagridview - Quicker way to populate with List loop?Datagridview - 使用列表循环填充的更快方法?
【发布时间】:2019-10-06 22:15:57
【问题描述】:

目前,我计划将 ~500K 列表添加到 datagridview。

Class 有多个 Fields,每个 List 有 13 个字段。 但我现在只绑定了 7 个字段。

问题是,添加似乎需要太多时间。 15K 需要 5 秒,这太糟糕了。

有没有办法优化这个? 还是我应该扔掉 datagridview 并考虑其他一些视图?

    private void UpdateDataGrid()
    {
        this.dataGridView1.Rows.Clear();
        for (int i = 0; i < gVar.gTagCount; i++)
        {
            this.dataGridView1.Rows.Add(new object[]
            {
                gVar.Tags[i].TagCount,
                gVar.Tags[i].Name,
                gVar.Tags[i].Score.Story,
                gVar.Tags[i].Score.Drawing,
                gVar.Tags[i].Score.Drawing,
                gVar.Tags[i].Score.Memetic,
                gVar.Tags[i].DupeCount
            });
        }
    }

【问题讨论】:

  • 与其这样,我认为创建一个类,填充该类的列表,然后使用 datasource 属性填充 datagridview 会更好
  • @nalnpir 我已经填充了该类的列表,因为我从原始文本文件(迭代每一行,将其值添加到字段)/格式化的 json 文件中导出它们。之后我像这样循环它们。
  • 如果您已经有一个填充列表,则不需要使用 Rows.Add。你可以简单地 dataGridView1.Datasource = listofyourclass;
  • 使用列表作为数据源,几乎是瞬间完成的。不过,您可能必须重构该类。
  • @nalnpir 我忘了说这个,对不起。我像这样循环的原因是 Tag 类还有其他字段,而不仅仅是那些。

标签: c#


【解决方案1】:

根据我们讨论的内容,我的方法是这样的:

首先创建一个新类,我将它命名为 TagsMin 这个类应该包含你在 datagridview 中想要的 7 个东西。

其次,我会像这样填充该类的列表(你需要用你想要的来完成它):

var tagList = gVar.Tags.Select(x => new TagsMin() { TagCount = x.TagCount, Name = x.Name... }).ToList()

最后一步是将其绑定到 datagridview:

dataGridView1.DataSource = tagList;

【讨论】:

  • Welp,这增加了行但所有数据都是空白的,TagsMin 确实得到了正确的数据,所以我猜 Datasource = TagList 需要一些额外的工作?
  • 告诉我你创建课程的方式。你使用属性了吗?
  • 不。公共类 TagforGrid { 公共字符串名称 = null;公共 int DupeCount = 0;公共 int TagCount = 0;公共 int URLCount = 0; //picked val 用于随机选择百分比值。公共 int PickedCount = 0;公共 int Score_Story = 0;公共 int Score_Reality = 0;公共 int Score_Drawing = 0;公共 int Score_Memetic = 0; }
  • 为此,您需要获取公共方法的设置,因此您可以使用自动属性(写入 prop 并按两次 tab,这是 sn-p),或者您编写一个 getter对于您拥有的每种方法
  • 其实是 DataPropertyName 的问题。我必须将其设置为与字段名称相同。感谢所有答案!现在比以前快得多了:)
【解决方案2】:

考虑使用分页,这样您就不会一次加载所有数据。下面链接的问题的答案提供了一个示例。

How can we do pagination in datagridview in winform

【讨论】:

  • 这是正确的。 GridView 会因为太多记录而“崩溃”,甚至滚动都会变得困难且缓慢。
【解决方案3】:

能否尽量避免循环,直接用标准方式绑定列表:

dataGridView1.DataSource = null;
dataGridView1.DataSource = gVar.Tags;

【讨论】:

  • 不,因为标签有多个其他字段。这就是为什么我这样循环它们。
猜你喜欢
  • 1970-01-01
  • 2016-09-09
  • 2015-04-30
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 2016-02-23
  • 1970-01-01
  • 2015-05-08
相关资源
最近更新 更多