GridView以错误的方式删除行

时间:2012-05-06 11:23:33

标签: c# wpf gridview row

我有一个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行未正确推送到正确的位置。甚至更新电网也无济于事。

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

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

它看起来好像你使用Grid控件,而不是'GridView'(我不知道任何带有该名称的WPF控件。)你使用RowDefinitions这是对我的暗示。

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

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

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

  1. 删除行中的所有控件
  2. 将已删除的行中的所有控件重新排列,然后
  3. 删除RowDefinition
  4. 您的代码似乎缺少第2步。

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

    PS。您之所以没有使用DataGrid

答案 1 :(得分:0)

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