DataGridに行番号を表示しよう。

DataGridには、行ヘッダ(RowHeader)というものがあり、デフォルトでは何も表示されない。
仕事で行ったのが、「行番号を表示する」というもの。
表示できたら、現在見ているデータが上から何番目なのかがよくわかったりする。
全部で何件あるかもわかるので、便利といえば、便利。
こういう時のstackoverflow。
Simple way to display row numbers on WPF DataGrid
おおう。流石。添付プロパティで実現できるんだ。ほぼそのままを実装させていただきました(-人-)。
(追記)
ただし、この実装は、タイトルにある通り「Simple way」であって、十分じゃない事がわかった。
この実装の問題点は、「行の増減に対処できていない」事。表示専用で、一覧表示後にデータの増減がないなら、これで十分なんだけどね。
増減(追加あるいは削除)に対応しようと思った時の実装メモ
・LoadingRowイベントだけでなく、UnloadingRowイベントもフックして実装する必要がある。
・UnloadingRow内で行番号の表示を更新する必要がある。
・DataGridの列ソート実行後に、UnloadingRow→LoadingRowイベントが発生するので、パフォーマンスを考えるなら、ソート時のUnloadingRowイベント時の処理を抑制する(その後のLoadingRowに任せる)。
・Unloadされた行以降の行番号を更新する。Load時は、Loadされた行以降の行番号を更新する
・UI仮想化を設定していると、表示中の行±10行くらいのみ実体(DataGridRow)を持っているので、nullチェックは必ず行う。
DataGrid自身のパフォーマンスが良いとはいえないので、パフォーマンスには常に気を使ったほうが良いかな。あと、メモリリークも。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


サイドバー背後固定表示サンプル

当ブログに書かれたソースコードは流用自由です。

バグ、スペルミス等はありうる事です。

ご利用の際は自己責任でお願いしますm(_ _)m