Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9743

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

$
0
0

注意
実務上で起きた話です。
プロジェクトから離れたので、具体的な特効薬コードは手元にない。
具体的なメソッドやそのときの解決策は出るので許して。
何番煎じその2。

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

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

NoData
1AAA
1-1BBB
1-2CCC
1-3DDD
2AAA
2-1BBB

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

NoData
1AAA
1-1BBB
1-2CCC
1-3DDD
2AAA
2-1BBB

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

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

NoData
1AAA
1-1BBB
1-2CCC
1-3DDD

とか

NoData
1AAA
1-1BBB
1-2CCC
1-3DDD

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

どう修正したか

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秒くらい)でもあべこべになっていたのがこれで解決。
おわり。


Viewing all articles
Browse latest Browse all 9743

Trending Articles