如何:在行更改过程中验证数据
验证数据是检查输入到应用程序数据中的值的过程。 建议在向基础数据存储区发送更新之前检查这些值。 这可以减少应用程序和数据存储区之间的潜在往返行程次数。
提示
“数据集设计器”创建一个可以在其中将验证逻辑添加到数据集的分部类。 设计器生成的数据集不会删除或更改该分部类中的任何代码。
通过响应 RowChanging 事件,可以在数据行中的值发生更改时对数据进行验证。 引发该事件时,该事件向会传递一个事件参数 (e.Row),此参数中包含当前行中每个列的建议值。 根据 e.Row 中每列的内容,可以进行以下操作:
接受建议的值,不采取任何措施。
从行更改事件处理程序内设置列错误 (SetColumnError),从而拒绝建议的值。
还可以使用 ErrorProvider 控件向用户显示一条错误信息。 有关更多信息,请参见 ErrorProvider 组件(Windows 窗体)。
您还可以使用 ColumnChanging 事件,在更改单个列期间执行验证。 有关更多信息,请参见 如何:在列更改过程中验证数据。
在 RowChanging 事件中验证数据
您可以编写代码,以验证每个要验证的列中包含的数据是否满足应用程序的要求。 如果建议的值不可接受,请设置该列,指示其包含一个错误。 以下的示例将在 Quantity 列为 0 或更小时设置列错误。 RowChanging 事件处理程序应与以下示例类似。
行更改时验证数据 (Visual Basic)
在**“数据集设计器”**中打开您的数据集。 有关更多信息,请参见如何:在数据集设计器中打开数据集。
双击要验证的表的标题栏。 此操作将自动在数据集的分部类文件中创建 DataTable 的 RowChanging 事件处理程序。
提示
在表名称的左侧双击,以创建 RowChanging 事件处理程序。 双击表名称可以对其进行编辑。
Private Sub Order_DetailsDataTable_Order_DetailsRowChanging( ByVal sender As System.Object, ByVal e As Order_DetailsRowChangeEvent ) Handles Me.Order_DetailsRowChanging If CType(e.Row.Quantity, Short) <= 0 Then e.Row.SetColumnError("Quantity", "Quantity must be greater than 0") Else e.Row.SetColumnError("Quantity", "") End If End Sub
行更改时验证数据 (C#)
在**“数据集设计器”**中打开您的数据集。 有关更多信息,请参见如何:在数据集设计器中打开数据集。
双击要验证的表的标题栏。 此操将为 DataTable 创建一个分部类文件。
提示
“数据集设计器”不会自动为 RowChanging 事件创建事件处理程序。 您必须创建一个方法以处理 RowChanging 事件,并在表的初始化方法中执行代码以挂钩该事件。
将下列代码复制到分部类中:
public override void EndInit() { base.EndInit(); Order_DetailsRowChanging += TestRowChangeEvent; } public void TestRowChangeEvent(object sender, Order_DetailsRowChangeEvent e) { if ((short)e.Row.Quantity <= 0) { e.Row.SetColumnError("Quantity", "Quantity must be greater than 0"); } else { e.Row.SetColumnError("Quantity", ""); } }