Top > Programming > .NetFramework > WPF > DataGrid > ShowRowNumberInRowHeader
Last-modified: Wed, 13 Mar 2013 07:41:20 JST
Counter:9586 Today:1 Yesterday:6 Online:4
このエントリーをはてなブックマークに追加

行ヘッダに行番号を表示する

About

Excelなどの表計算ソフトのように行番号を表示する、という需要は一定数あると思います。ここでは最も簡単な例を示します。

HowTo

この方法はすばらしく単純ですが、最善かつ最適な方法であることが保障されません。LoadingRowイベントを簡単に説明すると、行の表示読み込みの際に通知されるイベント(のよう)です。行が表示部分に読み込まれる場合に通知されるので、スクロールによっても通知されています。

LoadingRowイベントを利用して、行番号を表示するように設定します。イベントの通知から、対象となる行のヘッダが参照できます。さらに、その行のIndex(順)も取得することができるので、これらを利用してヘッダの内容を変更します。サンプルではラムダ式を利用して簡潔に書いていますが、イベントをoverrideする、イベントハンドラ用のメソッドを作って設定するなどでも当然良いです。

     DataGrid dataGrid;
…
     this.dataGrid.LoadingRow +=
          (sender, e) => {
               e.Row.Header = e.Row.GetIndex();
          };

行が表示部に読み込まれるたびにイベントが通知され、処理が実行されるので、パフォーマンスの観点から見て、最高の方法であるとは言えません。処理内容自体はそれほど大きな処理ではないですが、スクロールによっても実行されるのは非効率と言えるでしょう。

しかしながらこの程度の処理でパフォーマンスを気にするようなアプリケーションを開発する必要がある場合には、相応にレベルの高いプログラミング技術と知識が求められますし、2013年現在で考えれば、DataGridを満足に扱うことができないような実行端末で、DataGridのような仕組みを持ったアプリケーションは実行されないでしょう(信頼性の観点から)。

MSDNに異なる方法が掲載されています。

(当たり前のようなことですが)データの削除や追加などを行った場合は、DataGrid.Items.Refreshを実行します。行番号に不具合を来している場合などには確認をしておくべき点です。

Reference