创建 Web 窗体应用程序
在“文件”菜单上指向“添加项目”,然后单击“新建项目”。 /?"
在“添加新项目”对话框中,在“项目类型”窗格中选择“Visual C# 项目”或“Visual Basic 项目”,然后在“模板”窗格中单击“ASP.NET Web 应用程序”。
在“位置”框中,输入 Web 服务器(在您的开发计算机上)的名称和项目名称 http://ServerName/AuthorsWebClient,然后单击“确定”。
新项目添加到解决方案资源管理器。一个名为 WebForm1.ASPx 的 Web 窗体页添加到项目中并加载到设计器中。
为前面创建的 ASP.NET Web 服务项目添加 Web 引用:
在解决方案资源管理器中,右击 AuthorsWebClient 项目,然后单击快捷菜单上的“添加 Web 引用”。
在“添加 Web 引用”对话框顶部的“URL”框中,输入 XML Web services 项目的位置 (http://ServerName/AuthorsWebService/AuthorsService.asmx),然后按 ENTER 键。
单击“添加引用”。
现在可以在应用程序中创建 authors1 数据集的实例。
将控件添加到 Web 页
从工具箱的“数据”选项卡中将 DataSet 对象拖到窗体上。出现“选择数据集”对话框。选择“TypedDataSet”并从“名称”列表中选择“AuthorsWebClient.ServerName.authors1”。一个 DataSet 对象被添加到组件栏中。
选择 DataSet 对象并将 Name 属性设置为 AuthorData。
从“工具箱”的“Web 窗体”选项卡中将 DataGrid 控件拖到窗体上。
在 DataGrid 控件的“属性”窗口中,将 DataSource 属性设置为 AuthorData,将 DataMember 属性设置为 authors。这些设置出现在这些控件的下拉列表中。DataGrid 的列标题被设置为 authors 表的列名称。
若要支持在 DataGrid 控件中就地编辑,需要添加一个“编辑、更新、取消”列,该列将包含一个“编辑”按钮。当用户单击此“编辑”按钮时,该行的内容将显示在文本框中,并且“编辑”按钮将被“更新”和“取消”按钮替换。添加此列的方法是:
单击“属性”窗口底部的“属性生成器”链接,然后选择对话框中的“列”选项卡。
在“可用列”窗格中展开“按钮列”项。
选择“编辑、更新、取消”,然后单击 () 按钮。
单击“确定”。
为“编辑”、“更新”和“取消”按钮添加代码
右击窗体并选择“查看代码”。在 Page_Load 事件中添加填充 DataGrid 控件的代码,如下所示。这些代码创建 XML Web services 的实例,填充 AuthorData 数据集,并将此数据集绑定到 DataGrid 控件。每当页在往返过程后返回用户时,网格都将包含来自数据库中数据的全新副本。XML Web services 的 Credentials 属性用于将您的身份传递给 XML Web services,该服务接着将它传递给数据库服务器。
注意 在本演练中,每当 Web 窗体页下载到客户端浏览器时,都会从数据库中检索 authors 表的新副本。这可能不能提供最佳性能。有关优化性能的其他方法的讨论,请参见 Web 数据访问策略建议。
' Visual Basic
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim ws As New AuthorsWebClient.localhost.AuthorsService()
ws.Credentials = System.Net.CredentialCache.DefaultCredentials
AuthorData.Merge(ws.GetAuthors())
If Not Page.IsPostBack Then
Me.DataGrid1.DataBind()
End If
End Sub
// C#
private void Page_Load(object sender, System.EventArgs e)
{
AuthorsWebClient.localhost.AuthorsService ws =
new AuthorsWebClient.localhost.AuthorsService();
ws.Credentials = System.Net.CredentialCache.DefaultCredentials;
AuthorData.Merge(ws.GetAuthors());
if (! Page.IsPostBack)
{
DataGrid1.DataBind();
}
}
当用户单击“编辑”按钮时,将引发 DataGrid 控件的 EditCommand 事件。使用此事件更改 DataGrid 控件的 EditItemIndex 属性。EditItemIndex 属性指定的行将与所有数据一起显示在文本框中。
为 EditCommand 事件创建事件处理程序。
在 Visual Basic 中,右击页并选择“查看代码”。在代码编辑器的左下拉框中选择 DataGrid1。在右下拉框中选择“EditCommand”。
- 或 -
在 Visual C# 中,单击 DataGrid1 控件。在“属性”窗口中,单击“事件”按钮以显示 DataGrid 事件的列表。双击 EditCommand 事件。
如下所示添加代码。
' Visual Basic
Private Sub DataGrid1_EditCommand(ByVal source As Object, _
ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) _
Handles DataGrid1.EditCommand
DataGrid1.EditItemIndex = e.Item.ItemIndex
DataGrid1.DataBind()
End Sub
// C#
private void DataGrid1_EditCommand(object source,
System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DataGrid1.EditItemIndex = e.Item.ItemIndex;
DataGrid1.DataBind();
}
为 CancelCommand 事件创建事件处理程序。(有关添加事件处理程序的信息,请参见第 2 步。)
当用户单击“取消”按钮时,将引发 DataGrid 控件的 CancelCommand 事件。使用此事件将 EditItemIndex 属性设置为 -1,以便将当前行再次显示为文本。如下所示添加代码。
' Visual Basic
Private Sub DataGrid1_CancelCommand(ByVal source As Object, _
ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) _
Handles DataGrid1.CancelCommand
DataGrid1.EditItemIndex = -1
DataGrid1.DataBind()
End Sub
// C#
private void DataGrid1_CancelCommand(object source,
System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DataGrid1.EditItemIndex = -1;
DataGrid1.DataBind();
}
当用户单击“更新”按钮时,将引发 DataGrid 控件的 UpdateCommand 事件。该方法负责用 DataGrid 控件中的更改更新 AuthorData 数据集,并通过 XML Web services 将这些更改传递回数据库。为 UpdateCommand 事件创建事件处理程序。(有关添加事件处理程序的信息,请参见第 2 步。)如下所示添加代码。
' Visual Basic
Private Sub DataGrid1_UpdateCommand(ByVal source As Object, _
ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) _
Handles DataGrid1.UpdateCommand
' update each of the fields in the dataset row
Dim i As Integer
For i = 1 To AuthorData.authors.Columns.Count
' Controls(0) returns a Control object, so it must be cast
' to TextBox.
Dim t As TextBox = CType(e.Item.Cells(i).Controls(0), TextBox)
Dim row As DataRow = AuthorData.authors(e.Item.DataSetIndex)
row(AuthorData.authors.Columns(i - 1).Caption) = t.Text
Next
' Update the database.
If Me.AuthorData.HasChanges() Then
Dim ws As New AuthorsWebClient.localhost.AuthorsService()
ws.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim diffAuthors As New AuthorsWebClient.localhost.authors1()
diffAuthors.Merge(Me.AuthorData.GetChanges())
ws.UpdateAuthors(diffAuthors)
AuthorData.Merge(diffAuthors)
End If
' Take the row out of edit mode and display the new data.
DataGrid1.EditItemIndex = -1
DataGrid1.DataBind()
End Sub
// C#
private void DataGrid1_UpdateCommand(object source,
System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
// Change the data in the dataset.
for (int i=1; i <= AuthorData.authors.Columns.Count; i++)
{
TextBox t = (TextBox)(e.Item.Cells[i].Controls[0]);
DataRow row = AuthorData.authors[e.Item.DataSetIndex];
row[AuthorData.authors.Columns[i-1].Caption] = t.Text;
}
// Update the database.
if (AuthorData.HasChanges())
{
AuthorsWebClient.localhost.AuthorsService ws =
new AuthorsWebClient.localhost.AuthorsService();
ws.Credentials = System.Net.CredentialCache.DefaultCredentials;
AuthorsWebClient.localhost.authors1 diffAuthors =
new AuthorsWebClient.localhost.authors1();
diffAuthors.Merge(AuthorData.GetChanges());
ws.UpdateAuthors(diffAuthors);
AuthorData.Merge(diffAuthors);
}
DataGrid1.EditItemIndex = -1;
DataGrid1.DataBind();
}
需要配置项目的安全设置以便使用集成安全性。通过关闭匿名访问并打开模拟来执行此操作。有关更多信息,请参见安全模型。
配置集成 Windows 身份验证
若要为项目配置集成 Windows 身份验证,需要使用“Internet 信息服务”工具更改项目文件并配置项目。
启动“Internet 信息服务”工具。可以从“控制面板”的“管理工具”中运行它。(有关启动此工具的更多信息,请参见 Windows 帮助文档。)展开服务器的节点。
展开“默认 Web 站点”节点。
右击 AuthorsWebClient 的节点,并从快捷菜单中选择“属性”。
单击“目录安全性”选项卡。
单击“匿名访问和身份验证控制”节中的“编辑”按钮。
清除“匿名访问”复选框。
选中“集成 Windows 身份验证”框。现在已配置了 XML Web services 目录。
返回 Visual Studio 中的项目,在解决方案资源管理器中双击 Web.config 文件。
在 <system.web> 标记后面的行中添加下面的标记,以便为 XML Web services 配置集成安全性。
<identity impersonate="true"/>
运行应用程序
在解决方案资源管理器中选择“AuthorsWebClient”,右击然后选择“设为启动项目”。
按 CTRL+F5 以运行应用程序。
在本节中,您在解决方案中添加了一个 ASP.NET Web 应用程序项目作为数据的浏览器界面。将 Web 窗体页连接到了在第一节中创建的 XML Web services,并使用了 DataGrid 控件创建用于显示和编辑数据的用户界面。
部署解决方案或添加更多功能
这时,您可以部署应用程序;如果需要,还可以添加程序的其他功能。下面给出几条建议。
部署解决方案
您可以向服务器部署 Web 应用程序,也可以创建 Windows 应用程序的安装项目。有关部署 Web 应用程序的信息,请参见演练:部署 Web 解决方案。有关部署 Windows 应用程序的信息,请参见演练:部署 Windows 应用程序。
支持 Internet Web 访问
本演练处理 Intranet Web 应用程序的身份验证问题。您的应用程序可能被 Internet 上的用户访问,因此需要另一种身份验证解决方案。有关更多信息,请参见 IIS 身份验证和 Web 应用程序的访问权限。
支持添加或删除记录
本演练仅支持显示和更新数据库记录,而您可能还需要支持添加和删除记录。添加和删除不是 DataGrid Web 服务器控件支持的固有功能,但它们在 Windows 窗体 DataGrid 控件中受支持。有关更多信息,请参见允许用户删除 DataGrid Web 服务器控件中的项和在数据集中更新、插入和删除记录。
考虑安全性
本演练使用集成 Windows 身份验证来控制数据库访问。数据库安全性只是 Web 应用程序需要注意的一个方面。有关 Web 应用程序安全性的讨论,请参见 Web 应用程序的基本安全实施策略。
()。








