【发布时间】:2017-03-25 22:52:21
【问题描述】:
我在DataGridView 上显示了一些数据,在我的btnSave_Clickevent 中,我正在调用一个子例程来验证网格中的数据,然后再将其保存到我的数据库中。
我这样做的方式是对每一行使用一个循环,并在该循环内对每一列使用另一个 for 循环。
然后我需要比较它正在验证的单元格值中的每个字符(行 dr,单元格 dc)。但是,我无法找出使用行/列坐标来获取单元格中的值的方法。
有点难以解释我的意思,但在这段代码中,我在前两行设置了For Loops,然后在第三行设置了If IsDBNull(dc.TextInCell) - TextInCell 是我需要替换的。
在行中;博士和专栏; dc,然后我需要验证存储在该单元格中的值...
For Each dr As DataGridViewRow In dgvImport.Rows
For Each dc As DataGridViewColumn In dgvImport.Columns
If dc.HeaderText = "Product Code" Then
If IsDBNull(dc.TextInCell) = True Or dc.TextInCell = Nothing Or dc.TextInCell = "" Then
Me.Cursor = Cursors.Default
MsgBox("Import failed. One or more required fields were not entered", MsgBoxStyle.OkOnly, "Error")
Exit Sub
End If
For Each c As Char In dc.TextInCell
If Not Char.IsLetterOrDigit(c) Then
If Not Char.IsWhiteSpace(c) Then
If c <> "&" AndAlso c <> "-" AndAlso c <> "(" AndAlso c <> ")" Then
Me.Cursor = Cursors.Default
MsgBox("Import failed. One or more cells contains an invalid character", MsgBoxStyle.OkOnly, "Error")
Exit Sub
End If
End If
End If
Next
如何从这里将单元格值放入变量中以通过验证发送它?
【问题讨论】:
-
有些事件可以让您随时进行验证,这样您就可以告诉用户他们有一个错误当他们出错时,而不是“某处出现错误”这一页”。 CellValidating 是一种,CellLeave 也是一种可能
-
@Plutonix 不确定这里是否可行。这是从 Excel 电子表格中选择的数据,
DataSource是我选择后填写的DataTable -
在这种情况下,我绝对不会循环遍历 DGV,而是遍历 DataTable 行。您可以添加一列来指示哪些通过,哪些失败并提供一些视觉提示
-
@Plutonix 问题在于我不能使用列标题来决定需要什么验证。不同的用户在他们的电子表格中会有不同的列标题(但总是以相同的顺序),所以使用 DGV 意味着我可以设置索引标题,这样就不用担心用户在电子表格中调用它的内容。
-
如果您知道顺序,您可以使用它来触发这个或那个验证。您也可以转储大部分或所有代码来代替 RegEx。如果他们将坏数据编辑为好数据,您可能不得不再次调用它们,以便您检查它是否良好。
标签: .net vb.net validation datagridview