|
■No81848 (くま坊 さん) に返信 > ダブルクリックしたセルに"●"が書き込まれる。 > それ以外のTEST1列のセルは""が入るようにしています。
ダブルクリックする場所は、TEST1 列以外の場所でも良く、 行のどこかをダブルクリックしたときに その行の TEST1 セルを、上記のようにしたいということですね。
> If DataGridView1.Rows(iLoop).Cells("TEST1").Value.ToString = "●" Then > DataGridView1.Rows(iLoop).Cells("").Value = ""
この部分、 .Cells("TEST1").Value = "" ではなく、 .Cells("").Value = "" なのは、意図的なものでしょうか。
> 1000行を超えると動作が重すぎて、困っています。
DataGridView を使う場合は、基本的に「データバインド」を使いましょう。
Public Class Form1 Private WithEvents dataGridView1 As DataGridView Private tbl As DataTable
Private Sub DataGridView1_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles dataGridView1.CellDoubleClick Dim dgv = DirectCast(sender, DataGridView) If e.RowIndex < 0 Then Return '列ヘッダーの行が操作された場合は何もしない End If
'現在行の TEST1 の内容を取得 Dim value As String = CStr(dgv("TEST1", e.RowIndex).Value)
'既存の TEST1 を全クリア For Each row As DataRow In tbl.Rows row("TEST1") = "" Next
'現在行の編集開始 dgv.BeginEdit(False) If value = "●" Then '既に●が付いていたら、他の列をクリア dgv("TEST2", e.RowIndex).Value = "" Else 'まだ●が付いてい無い場合は、●をセット dgv("TEST1", e.RowIndex).Value = "●" End If dgv.EndEdit() End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load tbl = New DataTable() tbl.Columns.Add("Number", GetType(Integer)).ReadOnly = True tbl.Columns.Add("TEST1", GetType(String)) tbl.Columns.Add("TEST2", GetType(String)) For r = 1 To 2000 tbl.Rows.Add(r, "", "") Next tbl.AcceptChanges()
dataGridView1 = New DataGridView() dataGridView1.Dock = DockStyle.Fill dataGridView1.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2 dataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect dataGridView1.AllowUserToAddRows = False dataGridView1.AllowUserToDeleteRows = False Controls.Add(dataGridView1)
dataGridView1.DataSource = tbl End Sub End Class
|