【C#】DataGridView の 行選択時にチェックボックスの状態を変更する(その2)
おはようございます。
前回のものを少し改良しました。
変更したのは主に下記の制御。
- ドラッグでの複数選択
- Shift または Ctrl を押しながらの選択
- チェックボックスを直接チェックした場合の挙動
スポンサーリンク
プログラム
Form1.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | usingSystem; usingSystem.Collections.Generic; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Drawing; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; usingSystem.Windows.Forms; namespaceSampleDataGridCheckbox { /// <summary> /// サンプルフォーム /// </summary> publicpartial classForm1:Form { /// <summary> /// 初期化処理 /// </summary> publicForm1() { InitializeComponent(); dataGridView1.Rows.Add(false,"テスト1","テスト1"); dataGridView1.Rows.Add(false,"テスト2","テスト2"); dataGridView1.Rows.Add(false,"テスト3","テスト3"); dataGridView1.Rows.Add(false,"テスト4","テスト4"); dataGridView1.Rows.Add(false,"テスト5","テスト5"); dataGridView1.Rows.Add(false,"テスト6","テスト6"); dataGridView1.ClearSelection(); } /// <summary> /// データグリッドビューセルクリックイベント. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> privatevoiddataGridView1_CellClick(objectsender,DataGridViewCellEventArgse) { // ヘッダー以外 if(e.RowIndex>=0) { // クリックされた箇所を特定 DataGridViewCell cell=dataGridView1.CurrentCell; if(cell.OwningColumn.Name=="Column1") { if(cell.Value.ToString()=="False") { dataGridView1.Rows[e.RowIndex].SetValues(true); } else { dataGridView1.Rows[e.RowIndex].SetValues(false); } } else { if((Control.ModifierKeys& Keys.Shift) == Keys.Shift) { return; } if((Control.ModifierKeys& Keys.Control) == Keys.Control) { return; } // Shift or Ctrl キーが押されていなければクリック行以外をクリア dataGridView1.ClearSelection(); dataGridView1.Rows[cell.RowIndex].Selected=true; } } } /// <summary> /// データグリッドビュー選択変更イベント. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> privatevoiddataGridView1_SelectionChanged(objectsender,EventArgse) { // 選択されたセルを判定 DataGridViewCell cell=dataGridView1.CurrentCell; if(cell.OwningColumn.Name!="Column1") { // 選択行のチェックボックスの状態を制御 foreach(DataGridViewRow row indataGridView1.Rows) { if(row.Selected) { dataGridView1.Rows[row.Index].SetValues(true); } else { dataGridView1.Rows[row.Index].SetValues(false); } } } } } } |
起動してみる
GIFイメージ
SCREENPRESSOでGIF動画を撮ってみました。
まとめ
前回のものがちょっと納得いかなかったので改めて。
DataGridViewに別のチェックボックスやコンボボックスを配置する要件なんて、
とりあえず需要があることだろうに標準で用意してほしいですよね。
昨日以上にサクッとしてますが以上です。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません