vb.net - 如何处理 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: '对象引用未设置为对象的实例。
解决方案
您显示的错误通常来自将“允许用户添加行”设置为 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
推荐阅读
- java - 无法将 Gradle 项目与 IntelliJ 同步
- firebase - [Vue 警告]:创建钩子时出错:“TypeError:__WEBPACK_IMPORTED_MODULE_0__firebase_init__.a.firestore 不是函数”
- c# - Unity3D 运动问题(基于网格的寻路)
- c# - 集成 UWP Xaml Island GridView 的 WPF 项目
- java - IntelliJ Idea:是否有等效的 Visual Studio *.sln 文件?
- kubernetes - 在 Kubernetes 上运行本地制作的容器
- python - Shareplum Office365连接自发断线
- javascript - 我需要创建一个响应指令的函数
- python-3.x - Devstack 安装 - “错误:命令错误,退出状态为 1”
- elasticsearch - 按脚本字段对 Elasticsearch 中的搜索结果进行排序