首页 > 解决方案 > 如何处理 DataGridView 的所有行,而不仅仅是第一行

问题描述

下面的代码只影响 DataGridView 的第一行,但我想影响所有行。谁能帮我做到这一点?

Private arLetterChars() As Char = "ÇÈÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÝÞßáãäåæí"
Private arEncryptedChars() As Char = "أبتثجحخدذرزسشصضطظعغفقكتمنهوي"

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    With GV_Products.Rows(0).Cells(7).ToString

        For Each myTextBoxChar As Char In GV_Products.Rows(0).Cells(7).Value.ToString 
            For i As Integer = 0 To arLetterChars.Length - 1 
                If myTextBoxChar = arLetterChars(i) Then GV_Products.Rows(0).Cells(7).Value = GV_Products.Rows(0).Cells(7).Value.Replace(myTextBoxChar, arEncryptedChars(i))
            Next
        Next

    End With

End Sub

我将代码更改如下

For Each row As DataGridViewRow In GV_Products.Rows
    For Each myTextBoxChar As Char In row.Cells(5).Value.ToString
        For i As Integer = 0 To arLetterChars.Length - 1
           If myTextBoxChar = arLetterChars(i) Then row.Cells(5).Value = row.Cells(5).Value.Replace(myTextBoxChar, arEncryptedChars(i))
        Next
    Next
 Next

但仍然发生此错误 System.NullReferenceException: '对象引用未设置为对象的实例。

标签: vb.net

解决方案


您显示的错误通常来自将“允许用户添加行”设置为 True。这是 datagridview 底部的额外行,允许用户继续添加行。

如果不需要,您可以将其设置为 false,但我更喜欢在代码中检查它,以防您以后需要打开它而忘记检查它。

您只需要将代码更改为

For Each row As DataGridViewRow In GV_Products.Rows
    If Not row.IsNewRow Then 'Only run the inner code if we're not on the edit row.
        For Each myTextBoxChar As Char In row.Cells(5).Value.ToString
            For i As Integer = 0 To arLetterChars.Length - 1
                If myTextBoxChar = arLetterChars(i) Then row.Cells(5).Value = row.Cells(5).Value.Replace(myTextBoxChar, arEncryptedChars(i))
            Next
        Next
    End If
 Next

推荐阅读