选中并取消选中复选框时,在DataGridView中添加和删除行

时间:2013-09-20 08:02:10

标签: vb.net datagridview vb.net-2010

有两个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

1 个答案:

答案 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(强制在点击/检查后立即存储值)。