データグリッドビューのチェックボックスについて
受付中
回答 4
投稿
- 評価
- クリップ 2
- VIEW 10K+
VB.NETで開発を行っている初心者です。
今回VisualStudioでDataGridViewを題材として開発の勉強を行っているのですが手がつまりました。
お力添えをお願いします。
■現在の状況
DataGridViewでCSVを読み込み、表示させている状態です。
一番左の列がチェックボックス
二つがテキストカラム
1つがリンクカラムとなっています。
■実現させたいこと
1.チェックボックスをクリックした時に、行を全選択させたい。
(行のヘッダーをクリックした時と同じ状態)
2.チェックボックスにチェックを複数入れた状態で削除のボタンをクリック
した時に削除できるようにしたい。
ここの部分は削除ボタンを作成したのでイベント的にはボタンクリックのイベントになると思われます。
以上です。
セルをクリックしたときに行を全選択できるようにして、削除ボタンを押したらその選択されている行を削除ボタンを押すことによって削除できるところまではなんとかできました。
チェックボックスにチェックを入れたら行が前選択される
(複数のチェックボックスにチェックを入れて行の削除を行いたいのです)
このことがどう頑張ってもできないのでお助けください。
数多ある中で頻出している題材だとは思うのですがん煎撮ぞ宜しくお願い致します。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
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%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる