有两个datagridview GroupGrid和ProductGrid。 Groupgrid包含3列。第一个是复选框列。当加载from并将其存储在gGroupArray中时,将填充GroupGrid中的数据。通过比较gGroupArray和gProductArray的categoryID并在取消选中时删除行,我必须在复选框选中时填充Productgrid。我必须填充的数据在名为gProductArray的数组中。
将使用哪些事件以及如何执行此操作。如何检查选中或取消选中复选框的条件。我试过以下
Private Sub groupGrid_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles GroupGrid.CellClick
If e.ColumnIndex = 0 And Convert.ToBoolean(GroupGrid(e.ColumnIndex, e.RowIndex).Value) = True Then
Dim i As Integer = 0
Dim categoryId As Integer = GroupGrid.Rows(e.RowIndex).Cells("CategoryID").Value()
If gProductArray.Length < 0 Then Exit Sub
While i < gProductArray.Length
If categoryId = gProductArray(i).iCategoryID Then
ProductGrid.Rows.Add()
ProductGrid.Rows(i).Cells("ProductGroup").Value() = gProductArray(i).tProductGroup
ProductGrid.Rows(i).Cells("Product").Value() = gProductArray(i).tProductName
ProductGrid.Rows(i).Cells("CategoryID").Value() = gProductArray(i).iCategoryID
ProductGrid.Rows(i).Cells("LicenseProductID").Value() = gProductArray(i).lLicenseProductID
ProductGrid.Rows(i).Cells("SNRequired").Value() = gProductArray(i).bSNRequired
End If
i = i + 1
End While
End If
End Sub
答案 0 :(得分:0)
每次单击一个单元格时都会调用CellClick Event
(如果更改复选框,则无关紧要)。在任何情况下,在更改单元格的值之前调用此事件,从而获得先前的状态(如果检查它,则为False
)。您最好考虑CellValueChanged Event
。
Private Sub GroupGrid_CellValueChanged(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles GroupGrid.CellValueChanged
If started AndAlso e.ColumnIndex = 0 AndAlso GroupGrid(e.ColumnIndex, e.RowIndex).Value IsNot Nothing Then
Dim isChecked As Boolean = DirectCast(GroupGrid(e.ColumnIndex, e.RowIndex).Value, Boolean)
If (isChecked) Then
'Cell is checked
Else
'Cell is not checked
End If
End If
End Sub
如您所见,我包含一个布尔变量(started
)。它是全局定义的,并在Form Load Event
的末尾设置为true。使用此标志的原因是CellValueChanged Event
可以在Form Load
操作完成之前调用,如果使用任何涉及影响给定DataGridView
的代码,则会引发错误。您必须记住的其他事项是,在单击复选框后,但在“引入给定值”之后(例如,通过单击任何其他单元格或按下),不会更改值(因此不会触发此事件)输入)。复选框单元格的行为与文本单元格相同:如果在文本类型单元格中输入字符串,则不会自动存储这些值(您必须按Enter或选择其他单元格)。您可能需要提出一些额外的方法来避免这种最后的副作用,例如:SendKeys.Send("{ENTER}")
上的CellClick Event
(强制在点击/检查后立即存储值)。