1

グリッドビューがあり、この方法で行を削除すると:

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番目の行である場合は機能し、それ以外の場合は失敗します。

行 2. が削除された例 (インデックス 1) http://www.pic-upload.de/view-14074618/Unbenannt.png.html

行 3. は表示されず、行 2. は実際には削除されていますが、行 3. が適切な場所に正しくプッシュされていないように思えます。グリッドを更新しても役に立ちませんでした。

編集:現在の行は で、グリッド コンテンツを表す がありますList<Label>。行を埋める が、それを保持する RowDefinition と常に同じインデックスを持ってList<List<Label>>いることを既に確認しました。List<Label>

助言がありますか?

4

2 に答える 2

1

「GridView」とは対照的に、コントロールを使用しているように見えGridます(その名前のWPFコントロールは知りません)。あなたの使用は、RowDefinitionsこれを示唆しています。

内で、各コントロールが含まれる行は、その添付プロパティGridの値によって指定されます。Grid.RowグリッドのRowDefinitionsは、各行の高さを指定します。

を削除するRowDefinitionと、 内のさまざまな行の高さを調整するだけですGrid。を削除しても、グリッド内のコントロールの値にはRowDefinition影響しません。Grid.Row

行を完全に削除するには、次のことを行う必要があります。

  1. 行内のすべてのコントロールを削除し、
  2. 削除されたコントロールの下の行にあるすべてのコントロールをシャッフルし、
  3. を削除しRowDefinitionます。

あなたのコードにはステップ 2 が欠けているようです。

最後の行を削除する場合、シャッフルするコントロールがないため、このアプローチは機能します。最後から 2 番目の行を削除する場合にも機能するようです。0 から 9 までの番号が付けられた 10 行があり、行 8 を削除するとします。現在、0 から 8 までの番号を持つ 9 つの行定義があります。ただし、最後の行のコントロールのGrid.Row値はまだ 9 に設定されています。範囲外。WPF はGrid.Row範囲外のすべてのコントロールを最後の行に配置するため、行 9 のコントロールは行 8 に表示されます。RowDefinitionグリッドにバックを追加すると、行 9 のコントロールが新しい行に表示されることがわかります。行 9、行 8 にギャップを残します。

PS。を使用していない理由はDataGrid何ですか?

于 2012-05-06T12:00:55.447 に答える
0

currentRow と grdTable の正確な構造を調べてみてください。これらに一致しない何かに関連するものである可能性があります。ここに構造(そこにあるデータとそれがどのように構造化されているかを意味します)を投稿すると、あなたを助けようとする人々に役立ちます.

于 2012-05-06T11:38:37.103 に答える