演练:向数据集添加验证
更新:2007 年 11 月
本演练演示如何在对数据集中的数据进行更改时验证数据。在何处对数据执行验证检查取决于应用程序的要求;对于本演练,我们在对各列中的值进行更改的过程中验证数据。本演练使用 ColumnChanging 事件来验证输入到记录中的值是可接受的。如果值无效,则向用户显示 ErrorProvider 控件。
该示例还演示如何使用“数据集设计器”创建数据集的分部类。(用户可以在分部类中添加代码以扩展由 Visual Studio 生成的数据集的功能。它在数据集重新生成时不会覆盖。)
说明: |
---|
显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您的当前设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置。 |
本演练涉及以下任务:
创建新的“Windows 应用程序”项目。
使用 数据源配置向导 创建并配置数据集。
选择从“数据源”窗口拖动某些项时要在窗体上创建的控件。有关更多信息,请参见如何:设置从“数据源”窗口中拖动时要创建的控件。
通过将项从 “数据源”窗口 拖到您的窗体上来创建数据绑定控件。
创建分部类以扩展数据集的功能。
为 OrderDetails 表的 ColumnChanging 事件创建一个事件处理程序。
添加相应的验证来确认 Quantity 列包含大于 0 的值。
显示 ErrorProvider 组件(Windows 窗体) 来通知用户数据绑定控件包含无效值。
先决条件
若要完成本演练,您需要:
- 能够访问 Northwind 示例数据库。有关更多信息,请参见如何:安装示例数据库。
创建新的 Windows 应用程序
创建新的 Windows 应用程序项目
从“文件”菜单创建一个新的项目。
将项目命名为 ValidationWalkthrough。
选择“Windows 应用程序”,然后单击“确定”。有关更多信息,请参见创建基于 Windows 的应用程序。
ValidationWalkthrough 项目即被创建并添加到“解决方案资源管理器”中。
从数据库创建新数据源
创建数据源
在“数据”菜单上单击“显示数据源”。
在“数据源”窗口中,选择“添加新数据源”,启动“数据源配置向导”。
在“选择数据源类型”页面上选择“数据库”,然后单击“下一步”。
在“选择您的数据连接”页面上执行下列操作之一:
如果下拉列表中包含到 Northwind 示例数据库的数据连接,请选择该连接。
- 或 -
选择“新建连接”,以启动“添加/修改连接”对话框。有关更多信息,请参见“添加/修改连接”对话框(通用)。
如果数据库需要密码,请选择该选项以包括敏感数据,再单击“下一步”。
在“将连接字符串保存到应用程序配置文件”页面上单击“下一步”。
在“选择数据库对象”页面上展开“表”节点。
选择“Order Details”表,然后单击“完成”。
“NorthwindDataSet”被添加到您的项目中,并且“数据源”窗口中出现“OrderDetails”表。
创建数据绑定控件
在窗体上创建数据绑定控件
在“数据源”窗口中,选择“Order Details”表。
从表的控件列表中选择“Details”。
将“Order Details”节点从“数据源”窗口拖动到“Form1”上。
带有描述性标签的数据绑定控件会出现在窗体上,同时还显示一个工具条 (BindingNavigator),用于在记录间进行导航。带有描述性标签的数据绑定控件会出现在窗体上,同时还显示一个工具条 (BindingNavigator),用于在记录间进行导航。组件栏中出现 NorthwindDataSet、Order_DetailsTableAdapter、BindingSource 和 BindingNavigator。
将一个 ErrorProvider 控件添加到该窗体
配置 ErrorProvider 控件
将 ErrorProvider 从“工具箱”拖到“Form1”上。
在“属性”窗口中,将 ErrorProvider 的 DataSource 属性设置为“Order_DetailsBindingSource”。
说明: 不要设置 DataMember 属性。
创建 ColumnChanging 事件处理程序
创建验证事件处理程序
通过双击 解决方案资源管理器 中的“NorthwindDataSet.xsd”文件在“数据集设计器”中打开 NorthwindDataSet。
双击 OrderDetails 表中的 Quantity 列来创建 OrderDetailsDataTable_ColumnChanging 事件处理程序。(在 C# 中仅创建数据表的分部类。)
说明: 双击表名(标题栏中的“Order Details”)会创建 RowChanging 事件的事件处理程序。
添加代码来验证 e.ProposedValue 包含大于 0 的值。如果建议值小于或等于 0,则设置列来指示其包含错误。
将下面的代码粘贴到“Add user code here”(此处添加用户代码)注释下的列更改事件处理程序中:
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
// C# // Add the following code // to the partial class. 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", ""); } }
测试应用程序
测试应用程序
按 F5 运行该应用程序。
将“Quantity”文本框中的值更改为 0。
按 Tab 将焦点移动到文本框外。
出现错误提供程序图标。
使鼠标指针悬停于错误提供程序之上以查看消息。
后续步骤
根据应用程序的要求,在添加验证后可能要执行几个步骤。您可以通过以下操作来增强此演练的效果:
添加将更新发送回数据库的功能。有关更多信息,请参见 演练:将数据保存到数据库(单个表)。
编辑数据集来添加或移除数据库对象。有关更多信息,请参见 如何:编辑数据集。