【问题标题】:Validating changes to a column in a datatable depending on another column根据另一列验证对数据表中列的更改
【发布时间】:2014-04-18 02:35:09
【问题描述】:

我在 Visual Studio 2008 的 VB.net 中工作。

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

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

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

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

例如,假设我有一个“司机”表,其中存储有关司机如何驾驶汽车的信息。

它将包括字段:

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

我想验证一下:

1) percentHighway 和 percentCity 加起来是 100

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

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

-如果没有,则为vehicleTypeID 和wheelCount 设置ColumnError

编辑:

好的,正如@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")

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

感谢您对此的任何帮助!

【问题讨论】:

    标签: vb.net validation datatable multiple-columns


    【解决方案1】:

    如您所见,您的代码可以通过 e.Row 属性访问该行。您可以从该行中获取任何您想要的字段值,然后对它做任何您想做的事情,包括在验证其他字段时使用它。

    【讨论】:

    • 一旦你指出了这一点,我就能走得更远。 e.ProposedValue - 给我变化列的值。 e.Row.Item("columnName") - 给我不同列的值。现在我试图弄清楚添加错误。 e.Row.SetColumnError(e.Column, "Error Message") - 设置当前更改列的错误。数据绑定表单上的错误提供程序适当地发出哔哔声。我想我可能会在其他相关列上引发错误:e.Row.SetColumnError(e.Row.Table.Columns("columnName"), ""),但这似乎不起作用
    猜你喜欢
    • 1970-01-01
    • 2021-11-24
    • 2018-04-15
    • 2019-08-11
    • 2016-01-23
    • 2021-09-05
    • 1970-01-01
    • 2022-12-16
    • 2017-01-05
    相关资源
    最近更新 更多