显示在datagridview上选中/取消选中的行数

时间:2014-02-04 21:25:26

标签: vb.net datagridview

我在表单上有一个datagrid,带有一个复选框,用于选择所有记录。我的datagrid的列(0)是一个复选框列,在标题上我放了一个复选框来选择所有记录并显示所选记录的数量。这是我的代码:

Private Sub chkSelectRecords_CheckedChanged(sender As Object, e As EventArgs) Handles chkSelectRecords.CheckedChanged

        'Procedure runs when the checkSelectRecords is clicked.
        'The loop selects all records on the datagrid when checked
        'and clears selection when unchecked.

        Dim chkRow As Integer = 0

        If chkSelectRecords.Checked = True Then

            For Each row As DataGridViewRow In grdDeleteRecord.Rows

                row.Cells(0).Value = (row.Cells(0).Value IsNot DBNull.Value)
                chkRow += 1

                lblRowCount.Visible = True
                lblRowCount.Text = chkRow.ToString & " Record(s) Selected"
           Next
        Else
            For Each row As DataGridViewRow In grdDeleteRecord.Rows

                row.Cells(0).Value = (row.Cells(0).Value Is DBNull.Value)
                chkRow += 0

                lblRowCount.Text = chkRow.ToString & " Record(s) Selected"
            Next
        End If

    End Sub

当用户一次选择一条记录时,我放置了另一个程序:

Private Sub grdDeleteRecord_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles grdDeleteRecord.CellContentClick

' Shows how to get count of checked or unchecked checkbox column count along with
' how to get column data back for checked items.

Dim chkRowCount As Integer = 0

grdDeleteRecord.EndEdit()

For Each row As DataGridViewRow In grdDeleteRecord.Rows

    If row.Cells(0).Value = True Then
        chkRowCount += 1
    Else
        chkRowCount += 0

        lblRowCount.Visible = True
        lblRowCount.Text = chkRowCount.ToString & " Record(s) Selected"

    End If
Next

End Sub

这两个程序都可以根据需要运行。问题是当我选择所有记录时,我的标签不会更新现在选择的记录数。我确信这种情况正在发生,因为它们是两个独立的事件,我只是不知道如何链接事件或编写完成所有三个任务的程序

1 个答案:

答案 0 :(得分:1)

这是我为你写的一个功能。您必须使用CellValueChangedEvent和CurrentCellDirtyStateChanged事件......

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    lblRowCount.Text = SetLabel()
 End Sub


Private Function SetLabel() As String
    Dim strRows As String = String.Empty
    Dim intRows As Integer = 0

    For i As Integer = 0 To grdDeleteRecord.Rows.Count - 1
       If CBool(grdDeleteRecord(0, i).Value) Then
          intRows += 1
       End If
    Next

    If intRows > 0 Then
        strRows = intRows.ToString & " Record(s) Selected"
        lblRowCount.Visible = True
    End If

    Return strRows
End Function

Private Sub grdDeleteRecord_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles grdDeleteRecord.CellValueChanged
    lblRowCount.Text = SetLabel()
End Sub

Private Sub grdDeleteRecord_CurrentCellDirtyStateChanged(sender As Object, e As EventArgs) Handles grdDeleteRecord.CurrentCellDirtyStateChanged
    If grdDeleteRecord.IsCurrentCellDirty Then
        grdDeleteRecord.CommitEdit(DataGridViewDataErrorContexts.Commit)
    End If
End Sub

当您选中或取消选中这些复选框时,它将触发此事件,从而更新您的标签。然后,您可以在需要使用它的地方使用它。