获取Datagridview中符合certian标准的行数 - VB.Net

时间:2016-03-28 19:58:27

标签: vb.net datagridview row rowcount

我正在尝试在我的应用中完成一些功能,允许用户查看数据网格视图中显示的某些数据的数字表示。

所以基本上所有的条目都有9/9/2020,我想在标签上显示总数。不幸的是,我遇到了一个格式异常,说“输入字符串的格式不正确。”我认为它与Date列和整数转换有关。这是我的代码

Dim PendingTotal As Integer = 0
Dim counter As Integer
For i = 0 To (DataGridView2.Rows.Count - 1)
    If DataGridView2.Rows(i).Cells("DataGridViewTextBoxColumn20").Value = "9/9/2020" Then
        ' PendingTotal += counter
        PendingTotal += Integer.Parse(DataGridView2.Rows(counter).Cells("DataGridViewTextBoxColumn20").Value.ToString())
    End If
Next
lblPenReview.Text = PendingTotal.ToString

如果有人能够指出我正确的方向,我将非常感激。

2 个答案:

答案 0 :(得分:1)

似乎colum中存在的一个或多个值不是有效整数。对于空值或空值或十进制数也是如此。

如果您确定只有整数或null或空值,则可以更改循环逻辑以使用Int32.TryParse

If DataGridView2.Rows(i).Cells("DataGridViewTextBoxColumn20").Value = "9/9/2020" Then
    Dim temp As Integer
    Int32.TryParse(DataGridView2.Rows(i).Cells("DataGridViewTextBoxColumn20").Value.ToString(), temp)
    PendingTotal += temp
    Counter += 1
End If

Int32.TryParse将尝试将传递的字符串值转换为整数。如果成功,则第二个参数(temp)将设置为已解析的值,否则将设置为整数默认值(0)。如果存在无法转换为整数的内容,则不会抛出任何异常

顺便说一句,我已经使用循环索引器更改了使用counter变量进行的索引。您可能希望使用计数器来计算符合条件的行

答案 1 :(得分:0)

以下是未设置数据源且列类型为字符串的示例。注意我在演示中使用了一列,因为我没有看到您参考其他列以获取满足条件的单元格数量的要求。

如果设置了DataSource,也可以这样做。如果设置为表示DataTable,我们会将DataGridView.DataSource转换为DataTable,然后调整代码以解决DataTable而不是DataGridView。

''' <summary>
''' Get total count of rows where DataGridViewTextBoxColumn20 is
''' of type string.
''' </summary>
''' <remarks></remarks>
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        DataGridView2.Rows.Add(New Object() {"9/9/2020"})
        DataGridView2.Rows.Add(New Object() {"9/8/2020"})
        DataGridView2.Rows.Add(New Object() {""})
        DataGridView2.Rows.Add(New Object() {"9/8/2020"})
        DataGridView2.Rows.Add(New Object() {"9/9/2020"})
    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim Value As String = "9/9/2020"
        Dim ColumnName As String = "DataGridViewTextBoxColumn20"
        lblPenReview.Text = DataGridView2 _
            .Rows.Cast(Of DataGridViewRow) _
            .Where(Function(row)
                       Return (Not IsDBNull(row.Cells(ColumnName).Value)) AndAlso (row.Cells(ColumnName).Value = Value)
                   End Function) _
            .Select(Function(row) row.Cells(ColumnName).Value).Count.ToString
    End Sub
End Class