LoginSignup
0
0

More than 3 years have passed since last update.

Windows FormのDataGridViewに設置したチェックボックスをカチカチしたらがあべこべになった解決策

Last updated at Posted at 2020-03-10

結論から言うと、ダブルクリックイベントも考慮する必要があった。

どんな処理をしようとしていたか

DataGridViewには下記のようにデータは表示される。

No Data
1 AAA
1-1 BBB
1-2 CCC
1-3 DDD
2 AAA
2-1 BBB

例として、No列の1のチェックボックスをクリックすると
1-1~1-3のチェックボックスにもチェックが付き、2~2-1にはチェックが付かないようにする。
こんな感じ。

No Data
1 AAA
1-1 BBB
1-2 CCC
1-3 DDD
2 AAA
2-1 BBB

カチカチするとあべこべに

普通にポチッとクリックするだけなら問題なく動いたが、ダブルクリックみたいに間髪入れずにクリックするとこんな感じになる。

No Data
1 AAA
1-1 BBB
1-2 CCC
1-3 DDD

とか

No Data
1 AAA
1-1 BBB
1-2 CCC
1-3 DDD

になる。
こうなるともう無言で画面再表示。

どう修正したか

CellContentDoubleClickイベントを追加して同じ処理を行うようにした。

private void DgvCellContentClick(object sender, DataGridViewCellEventArgs e)
{
    // 大本のチェックボックスが選択されたか判定する
    if (dgv["1", e.RowIndex].Value.ToString() == "1")
    {
        // チェックボックスの状態を反映する
        dgv.CommitEdit(DataGridViewDataErrorContexts.Commit);

        // 関連するデータすべてのチェックボックスの状態を変更する
        if ((bool)dgv[e.ColumnIndex, e.RowIndex].EditedFormattedValue)
        {
            // チェックが付いた場合はチェックを付ける
            // 省略
        }
        else
        {
            // チェックが外れた場合はチェックを外す
            // 省略
        }
    }
}

private void DgvCellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
{
    // 全く同じ内容なので省略
}

データの種別を判定したり何なりは省略。

カチカチッ(コンマ秒)だけではなく、カチ‥カチ(1秒くらい)でもあべこべになっていたのがこれで解決。
おわり。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0