1

我有一个gridview,如果我以这种方式删除一行:

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 行没有正确推到正确的位置。即使更新网格也无济于事。

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

有什么建议么?

4

2 回答 2

1

在我看来,您好像在使用Grid控件,而不是“GridView”(我不知道有任何具有该名称的 WPF 控件。)您的使用RowDefinitions对我来说是这样的。

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

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

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

  1. 删除行中的所有控件,
  2. 将已删除的控件下方的行中的所有控件打乱,并且
  3. 删除RowDefinition.

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

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

PS。有什么理由你不使用 aDataGrid吗?

于 2012-05-06T12:00:55.447 回答
0

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

于 2012-05-06T11:38:37.103 回答