【C#】dataGridViewに追加したチェックボックスの列のヘッダをクリックしたらすべてのチェックを外すには①

この記事では、dataGridViewに追加したチェックボックスの列のヘッダをクリックしたらすべてのチェックを外す方法についてご説明します。

【動画】dataGridViewに追加したチェックボックスの列のヘッダをクリックしたらすべてのチェックを外す実際の動き

本題に入る前に、まずは次の動画をご覧ください。


dataGridViewをクリックするとCellClickイベントが呼び出されてdataGridViewのどのセルをクリックしたかを判定します。

判定条件に合致している場合(チェックボックス列のヘッダをクリックした場合)、クリックしたのがチェックボックス列のヘッダだった場合はチェックボックスすべてのチェックを外しています。

コードの流れ

STEP.1
dataGridViewのCellClickイベントを実行させる
dataGridViewのCellClickイベントを実行させます。
今回はセルがクリックされたときのイベントにCellClick(セルをクリックしたときに呼ばれるイベント)を選びましたが、似たようなイベントにCellContentClickイベント(セルに表示された値をクリックしたときに呼ばれるイベント)もあります。
STEP.2
クリックされたセルの行位置が「-1」でかつ列名がチェックボックスの列名かどうかを判定する
クリックされたセルの行位置が「-1」でかつ列名がチェックボックスの列名かどうかを判定します。
STEP.3
STEP.2の条件に該当する場合、dataGridViewのチェックボックスのValueプロパティにfalseを設定する
STEP.2の条件に該当する場合、dataGridViewのチェックボックスのValueプロパティにfalseを設定します。

dataGridViewの出力例

今回は次のdataGridViewを用意しました。

以上のdataGridViewにあるチェックボックス列のヘッダをクリックをすると、下のとおりにすべてのチェックボックスのチェックが外れました。

フォームのコード

        void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex == -1 && e.ColumnIndex == dataGridView1.Columns["チェック"].Index)
            {
                // クリックされたセルの行位置が「-1」でかつ列のヘッダが「チェック」の列の場合

                // datagridviewの行数分処理を繰り返すForeach文
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    // (「チェック」の列の)チェックボックスのチェックを外す
                    row.Cells["チェック"].Value = true;
                }
            }
        }

注目すべきコード①

最初に見て頂きたいのは1行目です。

        void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)

コードの説明

以上のコードは、dataGridViewのセルがクリックされた時に呼び出されるイベントプロシージャです。

dataGridViewクリックされると、CellClickイベントプロシージャが呼び出されます。

ただし、CellClickイベントプロシージャが呼び出されるには、以下のdataGridViewのプロパティ設定で、dataGridViewのイベント設定を行う必要があります。

注目すべきコード②

次に見て頂きたいのは3行目から13行目です。

            if (e.RowIndex == -1 && e.ColumnIndex == dataGridView1.Columns["チェック"].Index)
            {
                // クリックされたセルの行位置が「-1」でかつ列のヘッダが「チェック」の列の場合

                // datagridviewの行数分処理を繰り返すForeach文
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    // (「チェック」の列の)チェックボックスのチェックを外す
                    row.Cells["チェック"].Value = true;
                }
            }

コードの説明

以上のコードは、クリックされたセルの行位置が「-1」でかつ列名がチェックボックスの列名かどうかを判定し、該当する場合はすべてのチェックボックスのチェックを外す処理のコードです。

コードの詳細

3行目のコードは、クリックされたセルの行位置が「-1」でかつ列名がチェックボックスの列名かどうかを判定するIF文のコードです。

「-1」のセルの行位置はヘッダの行なので、IFの条件に含めます。

また、今回はチェックボックスの列のヘッダの文言が「チェック」なので、「チェック」かどうかも判定に含めます。

以上の条件に該当する場合は11行目のコードでValueプロパティにfalseを設定します。

Valueプロパティにfalseを設定することでチェックボックスのチェックが外れます。

なお、チェックボックスの列は「チェック」の列なので、Cellsプロパティに「チェック」の文字列を指定しています。

必ず文字列を合わせて指定してください。

また、チェックボックスすべてのチェックを外すので、8行目のforeachを使ってdataGridViewの行数分、11行目のチェックボックスのチェックを外す処理を繰り返します。

動作確認

「dataGridViewの出力例」をご覧ください。

最後に

この記事では、dataGridViewに追加したチェックボックスの列のヘッダをクリックしたらすべてのチェックを外す方法についてご説明します。

dataGridViewに追加したチェックボックスの列のヘッダをクリックしたらすべてのチェックを外したいときは本記事を参考にしてみてくださいね。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら