根据另一列验证数据表中列的更改

时间:2014-04-14 20:48:35

标签: vb.net validation datatable multiple-columns

我在Visual Studio 2008中使用VB.net。

我正在尝试向数据绑定数据集添加验证。 到目前为止,我一直在通过处理dataSet的“ColumnChanging”事件进行简单的验证。 这几乎完全是通过双击dataSet中的dataColumn完成的:

If (e.Column.ColumnName = Me.nameColumn.ColumnName) Then
    If e.ProposedValue.ToString.Trim = "" Then
        e.Row.SetColumnError(e.Column, "You must provide a name for this person.")
    Else
        e.Row.SetColumnError(e.Column, "")
    End If
End If

这适用于不依赖于任何其他字段的字段的简单验证。

我想根据dataSet中其他列的值有条件地验证列。

例如,假设我有一个“驱动程序”表,用于存储驾驶员驾驶汽车的信息。

它将包括字段:

personID (Foreign Key to the "person" table)
vehicleTypeID (Foreign Key to the "vehicleType" table)
percentHighway
percentCity
wheelCount

我想验证一下:

1)percentHighway和percentCity加起来为100

- 如果没有,请为两列调用SetColumnError

2)wheelCount> 4当vehicleTypeID = 3时(意味着车辆是半卡车,而不是汽车或皮卡车)

- 如果没有,则为vehicleTypeID和wheelCount

设置setColumnError

编辑:

好吧,正如@jmcilhinney在下面指出的那样,我可以使用e.Row来访问行数据。然后从那里,我可以看到其他列:

e.Row.Item("columnName")

现在我想一次向多个列添加错误。我可以说:

e.Row.SetColumnError("columnName", "Error Message")

并且工作正常,但仅适用于当前正在更改的列。

如果我说:

e.Row.SetColumnError("columnName1", "Error Message 1")
e.Row.SetColumnError("columnName2", "Error Message 2")

实际上只会创建其中一个错误,而且我的数据绑定表单上只有一个控件会弹出!显示错误。只有正在更改的字段实际上会添加一条错误消息。

感谢您对此有任何帮助!

1 个答案:

答案 0 :(得分:0)

如您所见,您的代码可以通过e.Row属性访问该行。您可以从该行获取所需的任何字段值,并使用它执行任何操作,包括在验证其他字段时使用它。