网格视图以错误的方式删除行

本文关键字:方式 删除行 错误 视图 网格 | 更新日期: 2023-09-27 18:33:23

我有一个网格视图,如果我以这种方式删除一行:

foreach(Label l in currentRow) // I have an internal list of the labels
{
    grdTable.Children.Remove(l); // the cells are filled with labels
}
grdTable.RowDefinitions.Remove(index);

如果它是最后一行或倒数第二行,则在其他情况下它会失败,它会起作用。

删除第 2 行的示例(索引 1(http://www.pic-upload.de/view-14074618/Unbenannt.png.html

第 3 行未显示,第 2 行。

真的被删除了,但在我看来,第 3 行。 未正确推到正确的位置。 即使更新网格也无济于事。

编辑:当前行是List<Label>,我有一个代表网格内容的List<List<Label>>。我已经检查过填充一行的List<Label>始终与保存它的 RowDefinition 具有相同的索引。

有什么建议吗?

网格视图以错误的方式删除行

在我看来

,您使用的是Grid控件,而不是"GridView"(我不知道有任何具有该名称的WPF控件。 你对RowDefinitions的使用向我暗示了这一点。

Grid中,每个控件所在的行由其Grid.Row附加属性的值给出。 网格的RowDefinitions指定每行的高度。

删除RowDefinition时,您所做的只是调整Grid内各行的高度。 删除RowDefinition不会影响网格中控件Grid.Row值。

要完全删除该行,您需要:

  1. 删除行中的所有控件,
  2. 将所有控件随机排列在已删除控件下方的行中,并且
  3. 删除RowDefinition

您的代码似乎缺少步骤 2。

您的方法适用于删除最后一行的情况,因为这样就没有控件可以随机播放。 在您删除倒数第二行的情况下,它似乎也有效。假设您有 10 行,编号从 0 到 9,然后删除第 8 行。 现在有 9 个行定义,数字为 0 到 8。 但是,最后一行中的控件的Grid.Row值仍设置为 9,这超出了范围。 WPF 将Grid.Row超出范围的所有控件放在最后一行,因此第 9 行中的控件显示在第 8 行中。 如果将RowDefinition添加回网格,您会发现第 9 行中的控件将出现在新的第 9 行中,从而在第 8 行中留下一个间隙。

附言。您不使用DataGrid的任何原因?

尝试查看currentRow和grdTable的确切结构。可能与这些不匹配的内容有关。在这里发布结构(我的意思是那里的数据以及它的结构(将帮助那些试图帮助你的人。