2016-03-28 12 views
0

私のアプリケーションでは、データグリッドビューに表示される特定のデータの数値表現を見ることができます。Datagridviewの行数を取得して証明書の基準を満たしている - VB.Net

したがって、2020年9月9日を持つすべてのエントリは、ラベルに合計を表示したいと思います。残念ながら、私は "入力文字列が正しい形式ではありませんでした"という形式の例外に遭遇します。私はそれが日付列と整数変換と関係していると思います。ここに私のコードです

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

DataGridViewTextBoxColumn2列の値は何ですか?あなたはすべて整数であると訴えていますか? nullまたは空の値がこのエラーを引き起こすと考えてください – Steve

+0

データがデータソースからのものである場合、そこから取得する方が簡単かもしれません。 – Plutonix

+0

データソースに関する情報、および情報についてのご意見ありがとうございました。 – Playergoodi

答えて

1

カラムに存在する1つ以上の値が有効な整数ではないようです。これは、空値またはヌル値、または10進数の場合にも当てはまります。

あなたは、整数または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は整数で渡された文字列値を変換しようとします。成功した場合、2番目のパラメータ(temp)は解析された値に設定され、それ以外の場合は整数のデフォルト(0)に設定されます。整数に変換できないものがある場合は例外がスローされません

ちなみに、ループ変数を使ってカウンタ変数を使ってインデックスを変更しました。おそらく、カウンターを使用して条件に一致する行を数えたいとします。

+0

スティーブ、あなたの例と解説に感謝します。 – Playergoodi

0

ここでは、データソースが設定されず、列の種類が文字列である例を示します。注意条件を満たすセルの数を取得するための要件について他の列を参照していないため、デモ用に1列を使用しました。

DataSourceが設定されている場合も同様です。 DataTableを設定すると、DataGridView.DataSourceをDataTableにキャストし、DataGridViewではなくDataTableを処理するようにコードを調整します。

''' <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 
関連する問題