如何:在列更改过程中验证数据
验证数据是检查输入到应用程序数据中的值的过程。 建议在将更新发送到基础数据存储区之前对值进行检查,这样可以减少应用程序和数据存储区之间潜在的往返行程量。
提示
“数据集设计器”创建一个可以在其中将验证逻辑添加到数据集的分部类。 设计器生成的数据集不会删除或更改该分部类中的任何代码。 有关更多信息,请参见 如何:扩展数据集的功能。
在数据列中的值发生更改时,可以通过响应 ColumnChanging 事件对数据进行验证。 引发此事件时,此事件将传递一个事件参数 (ProposedValue),此事件参数中包含为当前列建议的值。 根据 e.ProposedValue 的内容,您可以采取以下操作:
接受建议的值,不采取任何措施。
从 ColumnChanging 事件处理程序内设置列错误 (SetColumnError),从而拒绝建议的值。
还可以使用 ErrorProvider 控件向用户显示一条错误信息。 有关更多信息,请参见 ErrorProvider 组件(Windows 窗体)。
也可以在 RowChanging 事件期间执行验证。 有关更多信息,请参见 如何:在行更改过程中验证数据。
列值更改时对数据进行验证
在**“数据集设计器”**中打开您的数据集。 有关更多信息,请参见如何:在数据集设计器中打开数据集。
双击要验证的列。 此操作将创建 DataTable 的 ColumnChanging 事件处理程序。
提示
“数据集设计器”并不自动为此 C# 事件创建事件处理程序。 处理此事件所需的代码包含在下面。
添加代码以验证 e.ProposedValue 中包含的数据是否满足您应用程序的要求。 如果建议的值不可接受,则对该列进行设置,以指示其包含一个错误。
下面的代码示例在 Quantity 列为 0 或更小时将设置列错误。 ColumnChanging 事件处理程序应该与以下所示类似:
'Visual Basic Private Sub Order_DetailsDataTable_ColumnChanging(ByVal sender As System.Object, ByVal e As System.Data.DataColumnChangeEventArgs) _ Handles Me.ColumnChanging If (e.Column.ColumnName = Me.QuantityColumn.ColumnName) Then If CType(e.ProposedValue, Short) <= 0 Then e.Row.SetColumnError(e.Column, "Quantity must be greater than 0") Else e.Row.SetColumnError(e.Column, "") End If End If End Sub // C# // Add this code to the DataTable // partial class. public override void EndInit() { base.EndInit(); ColumnChanging += SampleColumnChangingEvent; } public void SampleColumnChangingEvent(object sender, System.Data.DataColumnChangeEventArgs e) { if (e.Column.ColumnName == QuantityColumn.ColumnName) { if ((short)e.ProposedValue <= 0) { e.Row.SetColumnError("Quantity", "Quantity must be greater than 0"); } else { e.Row.SetColumnError("Quantity", ""); } } }
请参见
任务
如何:验证 Windows 窗体 DataGridView 控件中的数据
如何:使用 Windows 窗体 ErrorProvider 组件显示窗体验证的错误图标