【问题标题】:Strange behaviour in for loop with DataGridView使用 DataGridView 的 for 循环中的奇怪行为
【发布时间】:2015-10-31 00:19:36
【问题描述】:

我有一个DataGridView,它从 XML 文件中获取其所有数据,我正在尝试将特定列的所有单元格值转换为 int,这是我正在使用的代码。

        for (int i = 0; i < targetTable.Rows.Count; i++)
        {
            if (!targetTable[6, i].Value.Equals(null) && !targetTable[6, i].Value.Equals(""))
            {
                targetTable[6, i].Value = int.Parse(targetTable[6, i].Value.ToString());
            }
            else
            {
                targetTable[6, i].Value = i + 1;
            }
        }

当我调试这个 for 循环时,索引只会在 0 和 1 之间永远交替,这会导致 StackOverFlowException

我无法弄清楚它发生的原因,任何帮助将不胜感激。

【问题讨论】:

  • 如果 TargetTable 是一个 DataTable,向它添加一个 Int Column 并用字符串列值填充它。然后删除字符串列并重命名新列。如果要将列放在同一列索引处,请使用 DataColumn.SetOrdinal() 函数。
  • @Graffito,我忘了提,但targetTableDataGridView
  • DataGridView 是否绑定到 DataTable(或任何其他 Dataource)?如果没有,您可以对 DGV 使用相同的原理。对于列索引,更改新列“DisplayIndex”属性。
  • 是的,它绑定到一个数据源,一个XML文件。
  • 这段代码运行在什么方法或事件中?由于网格是数据绑定的,因此您可能应该针对数据源而不是网格执行此操作。

标签: c# for-loop datagridview stack-overflow


【解决方案1】:

原件: 我想我会在行上使用 Foreach 而不是 for,它可能有助于找出奇怪行为背后的原因。

        foreach (DataGridViewRow row in targetTable.Rows)
        {
            if (!row.Cells[6].Value.Equals(null) && !row.Cells[6].Value.Equals(""))
            {
                row.Cells[6].Value = int.Parse(row.Cells[6].Value.ToString());
            }
            else
            {
                row.Cells[6].Value = row.Index + 1;
            }
        }

编辑: 鉴于新信息:您只想将列排序为 int,也许添加自定义 SortCompare 事件。

链接how to sort string as number in datagridview in winforms

【讨论】:

  • 我尝试使用您的代码但仍然遇到相同的错误,因此调试代码以查看实际发生的情况,我看到当索引为 1 时它会返回到 foreach 行,然后索引再次为 0,就像我的代码一样。
  • 你能举例说明你的 DataGridView 是什么样的吗?行数和值是多少。也许您正在查看错误的单元格,或者您的 XML 数据没有正确映射到 DataGridView。
  • 基本上我的 DataGridView 会实时显示测试项目及其状态,因此有项目、开始时间、状态和 ID 等列,后者是我要整理的列。我真正想要达到的目的是将所有 ID 排序为int,但程序将它们排序为string,例如:9、80、73、7、65、534、5、40、33 , 20, 19
  • 由于 DataGridView 绑定到 DataSource,因此无法对列实现自定义排序。正如@LarsTech 所指出的,您应该更新数据源。
  • 当用户单击列标题进行排序时,您还不想为 DataGridView 实现排序吗?
猜你喜欢
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多