.NET TIPS DataGridコントロールを行選択モードにするには?デジタルアドバンテージ2004/02/27 |
|
|
DataGridコントロールでは、デフォルトの機能として、グリッド上でセルを選択したり、行を選択したりできる。
デフォルトのDataGridコントロール |
DataGridコントロールでは、セルを選択したり、行を選択したりできる。この画面では、セルを選択している。 |
しかし、例えばDataGridコントロールを読み取り専用にして参照のみを可能にした場合、セル単位での選択を禁止し、行選択しかできないようにする方が(以降、これを行選択モードと呼ぶ)使い勝手はよいだろう。DataGridコントロールでは、このような行選択モードを擬似的に実現することができる。
行選択モードのDataGridコントロール |
DataGridコントロールで、行の選択しかできない、つまりセル選択できないようになっている。 |
DataGridコントロールで行選択モードを実現するには、セルがクリックされたとき、またはDataGridコントロールの内容がスクロールされたときに、「選択されているセル(以降、現在セル)の行を選択」すればよい。このクリックやスクロールのタイミングでは現在セルが再描画されるので、その再描画されるタイミングで行選択の処理が行える。具体的にはDataGridコントロールのPaintイベントのイベント・ハンドラとなるメソッドを追加して、そのメソッドでDataGridコントロールのSelectメソッドを呼び出す。これにより、現在セルの行を選択できる。
ところで、Paintイベントのイベント・ハンドラ内でSelectメソッドを呼んだ場合、Selectメソッドにより行が選択され、DataGridコントロールを再描画する必要が発生し、再びPaintイベントが発生する。これではPaintイベント・ハンドラがPaintイベントを発生することになってしまい、無限ループになってしまうのではと感じるかもしれないが、実際にはそうならない。
2回目に呼ばれたPaintイベント・ハンドラでSelectメソッドを呼んでも、行はすでに選択済みなので再描画の必要がなく、それ以上Paintイベントが発生することはない。よって、Paintイベント・ハンドラが2回呼び出されることになるものの、無限ループにはならないのである。
では、この行選択モードをDataGridコントロールで実現するサンプル・プログラムを次に示す。
|
|
DataGridコントロールで行選択モードを実現するサンプル・プログラム | |
サンプル・プログラム(C#:dgselline.cs、VB.NET:dgselline.vb)のダウンロード
|
なおこのサンプル・プログラムは、読み取り専用でデータ参照を行う仕様になっている。DataGridコントロール全体を読み取り専用にするには、このサンプル・プログラムの例のように、DataGridコントロールのReadOnlyプロパティをtrueにするだけでよい。行の操作を自由に設定したい場合、例えば新規行の追加や既存行の変更は無効にしたいが、行削除の機能は有効にしておきたいような場合には、「TIPS:DataGridコントロールで行の追加/削除およびデータ編集を禁止するには?」を参考にするとよい。
カテゴリ:Windowsフォーム 処理対象:DataGridコントロール 使用ライブラリ:DataGridコントロール 関連TIPS:DataGridコントロールで行の追加/削除およびデータ編集を禁止するには? |
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|