我有一个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相同的索引。
有什么建议吗?
答案 0 :(得分:1)
它看起来好像你使用Grid
控件,而不是'GridView'(我不知道任何带有该名称的WPF控件。)你使用RowDefinitions
这是对我的暗示。
在Grid
内,每个控件所在的行由其Grid.Row
附加属性的值给出。网格的RowDefinitions
指定每行的高度。
当您删除RowDefinition
时,您所实现的只是调整Grid
内各行的高度。删除RowDefinition
不会影响网格中控件的Grid.Row
值。
要完全删除该行,您需要:
RowDefinition
。您的代码似乎缺少第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的确切结构。可能是与这些中不匹配的东西相关的东西。在这里发布结构(我的意思是数据及其结构)将有助于那些试图帮助您的人。