我正在尝试在我的应用中完成一些功能,允许用户查看数据网格视图中显示的某些数据的数字表示。
所以基本上所有的条目都有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
如果有人能够指出我正确的方向,我将非常感激。
答案 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