将控件添加到窗体
从“工具箱”的“Windows 窗体”选项卡中将 DataGrid 控件拖到窗体上。 /?"
从“工具箱”的“Windows 窗体”选项卡中将 Button 控件拖到窗体上。将此按钮的 Name 属性设置为 LoadData,将它的 Text 属性设置为 Load。
从“工具箱”的“Windows 窗体”选项卡中将另一个 Button 控件拖到窗体上。将此按钮的 Name 属性设置为 SaveData,将它的 Text 属性设置为 Save。
从工具箱的“数据”选项卡中将 DataSet 对象拖到窗体上。出现“添加数据集”对话框。选择“类型化数据集”并从“名称”列表中选择“AuthorsWinClient.ServerName.authors1”。此操作将在组件栏中创建一个基于 authors1 数据集类定义的 DataSet 对象。
选择 DataSet 控件并将 Name 属性设置为 AuthorData。
选择 DataGrid 控件并从 DataSource 属性列表中选择 AuthorData。从 DataMember 属性列表中选择 authors。DataGrid 的列标题被设置为 authors 表的列名称。
为 LoadData 和 SaveData 按钮添加代码
在“视图”菜单上单击“设计器”。双击 LoadData 按钮为 Click 事件创建一个空事件处理程序。调用 XML Web services 方法的方法是先创建服务类的一个实例,然后调用服务方法。在这种情况下,调用 GetAuthors 方法。返回的数据集会与 AuthorData 数据集合并,XML Web services 的 Credentials 属性用于将您的身份传递给 XML Web services,该服务接着将它传递给数据库服务器。将如下所示的代码添加到方法中。
注意 如果 XML Web services 不是在本地计算机上运行的,则需要用运行 XML Web services 的服务器名称替换代码示例中的 localhost。
' Visual Basic
Private Sub LoadData_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles LoadData.Click
Dim ws As New AuthorsWinClient.localhost.AuthorsService()
ws.Credentials = System.Net.CredentialCache.DefaultCredentials
AuthorData.Merge(ws.GetAuthors())
End Sub
// C#
private void LoadData_Click(object sender, System.EventArgs e)
{
AuthorsWinClient.localhost.AuthorsService ws =
new AuthorsWinClient.localhost.AuthorsService();
ws.Credentials = System.Net.CredentialCache.DefaultCredentials;
AuthorData.Merge(ws.GetAuthors());
}
在“视图”菜单上单击“设计器”。双击 SaveData 按钮为 Click 事件创建一个空事件处理程序。
如果数据集有改动,则将创建一个 authors1 类型的新数据集来仅保存更改的数据。然后,此数据集被传递到 XML Web services 的 UpdateAuthors 方法。此数据集与接受的更改一起返回,并且更新 AuthorData 数据集以反映这些新的更改。有关接受数据集更改的更多信息,请参见数据适配器介绍。
注意 在成品应用程序中,将需要在这一步中考虑数据并发问题。有关更多信息,请参见介绍 ADO.NET 中的数据并发。
将以下代码添加到方法中:
' Visual Basic
Private Sub SaveData_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles SaveData.Click
If AuthorData.HasChanges() Then
Dim ws As New AuthorsWinClient.localhost.AuthorsService()
ws.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim diffAuthors As New AuthorsWinClient.localhost.authors1()
diffAuthors.Merge(AuthorData.GetChanges())
diffAuthors = ws.UpdateAuthors(diffAuthors)
AuthorData.Merge(diffAuthors)
End If
End Sub
// C#
private void SaveData_Click(object sender, System.EventArgs e)
{
if (AuthorData.HasChanges())
{
AuthorsWinClient.localhost.AuthorsService ws =
new AuthorsWinClient.localhost.AuthorsService();
ws.Credentials = System.Net.CredentialCache.DefaultCredentials;
AuthorsWinClient.localhost.authors1 diffAuthors
= new AuthorsWinClient.localhost.authors1();
diffAuthors.Merge(AuthorData.GetChanges());
diffAuthors = ws.UpdateAuthors(diffAuthors);
AuthorData.Merge(diffAuthors);
}
}
运行应用程序
从“文件”菜单中,选择“全部保存”。
在解决方案资源管理器中选择“AuthorsWinClient”,右击并选择“设为启动项目”。
按 CTRL+F5 以运行应用程序。
显示出一个窗口,其中包含一个空表,表的标头来自 pubs 数据库中的 authors 表。
单击“加载”填充此表,做一些更改,然后单击 Save 保存所做的更改。
在上一节中,您在解决方案中添加了一个 Windows 窗体项目作为 Windows 界面。将 Windows 窗体连接到了在第一节中创建的 XML Web services,并使用 DataGrid 和 Button 控件创建了用于加载和更新数据的用户界面。在下一节中,您将为解决方案创建基于 Web 的用户界面。
Web 用户界面选项
Web 界面有助于应用程序访问各种不同的客户机和浏览器。所有用户界面处理都在 Web 服务器上而不是在客户端完成。您将使用 Web 窗体页来创建一个 Web 界面,与上一节中创建的 Windows 界面一样,此界面访问同一个中间层业务对象。下列关系图突出显示要实现的客户端。
分布式应用程序中的 Web 客户端
()。








