質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.23%

データグリッドビューのチェックボックスについて

受付中

回答 4

投稿

  • 評価
  • クリップ 2
  • VIEW 10K+

alf824824

score 13

はじめて利用させていただきます。

VB.NETで開発を行っている初心者です。

今回VisualStudioでDataGridViewを題材として開発の勉強を行っているのですが手がつまりました。

お力添えをお願いします。

■現在の状況
DataGridViewでCSVを読み込み、表示させている状態です。
一番左の列がチェックボックス
二つがテキストカラム
1つがリンクカラムとなっています。

■実現させたいこと
1.チェックボックスをクリックした時に、行を全選択させたい。
(行のヘッダーをクリックした時と同じ状態)

2.チェックボックスにチェックを複数入れた状態で削除のボタンをクリック
した時に削除できるようにしたい。
ここの部分は削除ボタンを作成したのでイベント的にはボタンクリックのイベントになると思われます。

以上です。

セルをクリックしたときに行を全選択できるようにして、削除ボタンを押したらその選択されている行を削除ボタンを押すことによって削除できるところまではなんとかできました。

チェックボックスにチェックを入れたら行が前選択される
(複数のチェックボックスにチェックを入れて行の削除を行いたいのです)

このことがどう頑張ってもできないのでお助けください。
数多ある中で頻出している題材だとは思うのですがん煎撮ぞ宜しくお願い致します。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

0

初めまして
DataGridViewのオプションで「MultiSelect」を「True」、「SelectionMode」を「FullRowSelect」にして以下のようにしてはどうでしょうか。

<VB>
Private Sub DataGridView1_LostFocus(sender As Object, e As System.EventArgs) Handles DataGridView1.LostFocus

        Me.DataGridView1.EndEdit()
        For Rw As Integer = 0 To Me.DataGridView1.RowCount - 1
            Dim Ck As Boolean = Me.DataGridView1.Rows(Rw).Cells(0).Value
            If Ck = True Then
                Me.DataGridView1.Rows(Rw).Selected = True
            Else
                Me.DataGridView1.Rows(Rw).Selected = False
            End If
        Next
    End Sub

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

こんにちは。
こうですかね。
Public Class Form1

    Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        With dgv
            .AllowUserToAddRows = False
            .Columns.Add(New DataGridViewCheckBoxColumn() With {.HeaderText = "check",
                                                                .Name = "column1"})
            .Columns.Add("column2", "text1")
            .Columns.Add("column3", "text2")
            .Rows.Add(False, "A1", "B1")
            .Rows.Add(False, "A2", "B2")
            .Rows.Add(False, "A3", "B3")
        End With
        AddHandler dgv.CurrentCellDirtyStateChanged, AddressOf dgv_CurrentCellDirtyStateChanged
        AddHandler dgv.CellValueChanged, AddressOf dgv_CellValueChanged
    End Sub

    Sub dgv_CurrentCellDirtyStateChanged(ByVal sender As Object, ByVal e As EventArgs)
        If dgv.CurrentCellAddress.X = 0 AndAlso dgv.IsCurrentCellDirty Then
            dgv.CommitEdit(DataGridViewDataErrorContexts.Commit)
        End If
    End Sub

    Sub dgv_CellValueChanged(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs)
        dgv.SuspendLayout()
        If e.ColumnIndex = 0 Then
            For Each row As DataGridViewRow In dgv.Rows
                row.Selected = CBool(row.Cells(0).Value)
            Next
        End If
    End Sub

End Class

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

質問を読むと、どこまでできているのかよくわからないのですが…。
2.チェックボックスにチェックを複数入れた状態で削除のボタンをクリックした時に削除できるようにしたい。
の方は以下でできると思います。(同じようなことをやっていて他の方に教えていただいたのですが・・。)

Private Sub ButtonDelete_Click_1(sender As Object, e As EventArgs) Handles ButtonDelete.Click

    '最下行から上に向かってチェックボックスにチェックが入っているかどうかループで判断していく
     Dim i As Integer
           For i = DataGridView1.Rows.Count - 1 To 0 Step -1
                 'チェックが入っている場合は行削除
          If DataGridView1(colSELFLG, i).Value = True Then
                    DataGridView1.Rows.RemoveAt(i)
                End If
            Next

    End Sub

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

多分ですが、チェックボックスをクリックしたらチェックされた行を識別したいという事でしょうか?
それならこれでどうでしょうか?

全て選択、解除のリンクラベルクリック

    Private Sub lnk_全て_LinkClicked(sender As System.Object, e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles lnk_全て.LinkClicked, lnk_解除.LinkClicked
        For _カウンター = 0 To データグリッド.RowCount - 1
            If sender Is lnk_全て Then
                データグリッド(clm_選択.Index, _カウンター).Value = True
            Else
                データグリッド(clm_選択.Index, _カウンター).Value = False
            End If
        Next
    End Sub
データグリッドの選択チェックが変更された

    Private Sub データグリッド_CellValueChanged(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles データグリッド.CellValueChanged
        If データグリッド.RowCount <= 0 Then
            Exit Sub
        End If

        If e.ColumnIndex = clm_選択.Index Then
            If データグリッド(clm_選択.Index, e.RowIndex).Value Then
                データグリッド.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.DarkSlateBlue
                データグリッド.Rows(e.RowIndex).DefaultCellStyle.ForeColor = Color.White
            Else
                データグリッド.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Empty
                データグリッド.Rows(e.RowIndex).DefaultCellStyle.ForeColor = Color.Empty
            End If
        End If
    End Sub

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.23%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る