图 1. 完成的页面 |
| <root> <schema id="DocumentElement" targetNamespace="" xmlns="http://www.w3.org/1999/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <element name="Author"> <complexType content="elementOnly"> <element name="au_id" type="string" minOccurs="1" maxOccurs="1"></element> <element name="au_name" type="string" minOccurs="1" maxOccurs="1"></element> <element name="address" type="string" minOccurs="0" maxOccurs="1"></element> <element name="city" type="string" minOccurs="0" maxOccurs="1"></element> <element name="state" type="string" minOccurs="0" maxOccurs="1"></element> <element name="zip" type="string" minOccurs="0" maxOccurs="1"></element> <element name="phone" type="string" minOccurs="0" maxOccurs="1"></element> </complexType> <unique name="AuthorConstraint" msdata:PrimaryKey="True"> <selector>.</selector> <field>au_id</field> </unique> </element> <element name="Title"> <complexType content="elementOnly"> <element name="title_id" type="string" minOccurs="1" maxOccurs="1"></element> <element name="au_id" type="string" minOccurs="1" maxOccurs="1"></element> <element name="title" type="string" minOccurs="1" maxOccurs="1"></element> <element name="price" msdata:DataType="System.Currency" type="string" minOccurs="1" maxOccurs="1"></element> <element name="pubdate" type="timeInstant" minOccurs="1" maxOccurs="1"></element> </complexType> <unique name="TitleConstraint" msdata:PrimaryKey="True"> <selector>.</selector> <field>title_id</field> </unique> <key name="AuthorTitle"> <selector>../Author</selector> <field>au_id</field> </key> <keyref refer="AuthorTitle"> <selector>.</selector> <field>au_id</field> </keyref> </element> </schema> <DocumentElement> <Author> <au_id>154-00-1300</au_id> <au_name>John Doe</au_name> <phone>425 705 1234</phone> <address>One Microsoft Way</address> <city>Redmond</city> <state>CA</state> <zip>98005</zip> </Author> <Title> |
这些样例简化了数据访问,从而将重点全部放在 DataGrid 的使用上。上面的 XML 被加载进一个 DataSet。 DataSet 为数据提供高速缓存,从而可以进行筛选、排序和编辑等等各种操作。下面的代码来自 Global.asax,用于加载 DataSet 和将其保存为 Session 状态。
|
public void Session_OnStart() { FileStream fs = null; |
在实际的 Web 应用程序中,通常不是使用处于 Session 或 Application 状态的高速缓存数据,而是通过所存储的过程、中间层业务对象,或通过调用 Web 服务所揭示的方法来访问和修改数据。无论采取怎样的手段来访问数据,您会发现你依旧以同样的方式来编程和与控件的对象模型进行进行交互。
第 1 步: 一个基本的 DataGrid
序列的第一步展示了一个页面,其中包含单独一个 DataGrid 控件,用于显示来自数据源的一个只读图书列表。
图 2. 完成第 1 步后的页面
DataGrid 声明来自:
| <%@ Register TagPrefix="cr" Namespace="CrystalDecisions.Web" Assembly="CrystalDecisions.Web" %> <%@ Page Language="vb" AutoEventWireup="false" Codebehind="Borrow.aspx.vb" Inherits="borrrow.Borrow"%> <%@ Register TagPrefix="cr" Namespace="CrystalDecisions.Web" Assembly="CrystalDecisions.Web" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <title>档案、图书流通管理</title> <meta content="Microsoft Visual Studio.NET 7.0" name="GENERATOR"> <meta content="Visual Basic 7.0" name="CODE_LANGUAGE"> <meta content="JavaScript" name="vs_defaultClientScript"> <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema"> </HEAD> <body bgColor="beige" MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <asp:label id="Label14" style="Z-INDEX: 101; LEFT: 100px; POSITION: absolute; TOP: -50px" runat="server" Width="47px" Height="18px"></asp:label> <asp:linkbutton id="LinkFind" style="Z-INDEX: 105; LEFT: 361px; POSITION: absolute; TOP: 182px" runat="server" Width="33px" Height="22px" ToolTip="按此进行查询" ForeColor="#0000C0">查询</asp:linkbutton> <TABLE style="Z-INDEX: 104; LEFT: 133px; WIDTH: 637px; POSITION: absolute; TOP: 75px; HEIGHT: 74px" cellSpacing="1" cellPadding="1" width="637" border="1"> <TR> <TD style="WIDTH: 92px"> <asp:label id="lblFind1" runat="server" ForeColor="Green">检索号</asp:label> </TD> <TD style="WIDTH: 196px"> <asp:textbox id="txtFind1" runat="server" Width="199px" Height="26px"></asp:textbox> </TD> <TD style="WIDTH: 83px"> <asp:label id="lblFind4" runat="server" ForeColor="Green">标准号</asp:label> </TD> <TD> <asp:textbox id="txtFind4" runat="server" Width="243px" Height="26px"></asp:textbox> </TD> </TR> <TR> <TD style="WIDTH: 92px"> <asp:label id="lblFind2" runat="server" ForeColor="Green">标准书号</asp:label> </TD> <TD style="WIDTH: 196px"> <asp:textbox id="txtFind2" runat="server" Width="199px" Height="26px"></asp:textbox> </TD> <TD style="WIDTH: 83px"> <asp:label id="lblFind5" runat="server" ForeColor="Green">分类号</asp:label> </TD> <TD> <asp:textbox id="txtFind5" runat="server" Width="243px" Height="26px"></asp:textbox> </TD> </TR> <TR> <TD style="WIDTH: 92px"> <asp:label id="lblFind3" runat="server" ForeColor="Green">图书名称</asp:label> </TD> <TD style="WIDTH: 196px"> <asp:textbox id="txtFind3" runat="server" Width="199px" Height="26px"></asp:textbox> </TD> <TD style="WIDTH: 83px"> <asp:label id="lblFind6" runat="server" ForeColor="Green">检索号</asp:label> </TD> <TD> <asp:textbox id="txtFind6" runat="server" Width="242px" Height="26px"></asp:textbox> </TD> </TR> </TABLE> <asp:datagrid id="DataGrid1" style="Z-INDEX: 102; LEFT: 129px; POSITION: absolute; TOP: 213px" runat="server" Width="1600px" Height="325px" AlternatingItemStyle-Wrap="False" CellPadding="4" BorderWidth="1px" BorderStyle="None" BorderColor="#CC9966" BackColor="White" AllowPaging="True" ToolTip="可按选择按钮选择所要借阅的图书、资料"> <FooterStyle Wrap="False" ForeColor="#330099" BackColor="#FFFFCC"></FooterStyle> <HeaderStyle Font-Bold="True" Wrap="False" HorizontalAlign="Left" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle> <PagerStyle HorizontalAlign="Center" ForeColor="#330099" BackColor="#FFFFCC" Wrap="False" Mode="NumericPages"></PagerStyle> <SelectedItemStyle Font-Bold="True" Wrap="False" ForeColor="#9900FF" BackColor="#FFCC66"></SelectedItemStyle> <EditItemStyle Wrap="False"></EditItemStyle> <AlternatingItemStyle Wrap="False"></AlternatingItemStyle> <ItemStyle Wrap="False" ForeColor="#CC9900" BackColor="White"></ItemStyle> <Columns> <asp:ButtonColumn Text="查阅" HeaderText="选择" CommandName="Select" ItemStyle-ForeColor="#3366CC"></asp:ButtonColumn> </Columns> </asp:datagrid> <asp:LinkButton id="LinkSumit" style="Z-INDEX: 109; LEFT: 816px; POSITION: absolute; TOP: 184px" runat="server" Width="42px" Height="18px" ToolTip="可按此把借阅信息传入管理人员" ForeColor="#0000C0">提交</asp:LinkButton> <asp:Label id="Label1" style="Z-INDEX: 110; LEFT: 138px; POSITION: absolute; TOP: 186px" runat="server" ForeColor="#C00000">你已经选择了该行!</asp:Label> </form> </body> </HTML> |
上面的代码展示 DataGrid,该控件的各种属性已经过声明设定。 DataGrid 控件与其它 Web 控件如 Font、BackColor、ForeColor 和 BorderWidth 共享一组公用的样式属性。另外, DataGrid 提供仅适用于表的属性如 CellPadding。最后, DataGrid 提供附加的样式属性,这些样式属性影响其中各项目和列如 HeaderStyle、ItemStyle 和 AlternatingItemStyle 的表示。这些样式属性用于创建丰富多采且极富魅力的数据视觉效果。
DataGrid 支持从其所绑定的数据源自动生成列的功能。在本例中, AutoGenerateColumns 属性已被设定为 true。因此必须借助要展示的列集对 Columns 集合进行绑定。从而可以更多地控制表现效果,诸如列的次序和标头以及与每列对应的样式。这一步中所定义的列均为 BoundColumns,从而可以通过其 DataField 属性,绑定到数据源的单独一个字段。您在以后步骤中可以看到, DataGrid 允许选择各种各样类型的列。
下面的类包含支持本页面的代码。
Step1Page.vb:
|
Imports System.DBNull Public Class Borrow Dim SelectTable As New DataTable() |
该类超越 Page 的 OnLoad 方法 (类似于实施 Page_Load),将 建立一个临时表并巧妙地利用Session在加载页面时保证仅执行一次。与其它一般页面一样,确定来访者人数。
第 2 步: 带有动态绑定的DataGrid
创建带有动态绑定的DataGrid视图的一个方法就是一个DataGrid来显示不同的数据表格的内容。这里有个必须解决的问题,就是不同的表在一个表格中怎样绑定?如何确定表的字段,特别是表的英文字段怎样变成中文?大多数的方法是用绑定字段方法实现,在绑定字段后改变标题,这种方法是不可取的。一般不能实现动态绑定,因在绑定字段时必须先申明DataGrid,这里,我们是不允许申明二个以上的DataGrid。正确的方法是在用表绑定DataGrid前临时改变表的字段名。下面就是实现的方法
页包含对DataGrid 的数据绑定。DataGrid 用于显示图书和档案的内容。与第 1 步相同, DataGrid 包含一个针对要显示的列的定义,以及用于为列、行和总体控制提供可视格式化的样式属性设置。在绑定之前先根据用户的选择进行查询。查询内容是不变化的,我们通过SetText过程来动态设置标题。在查询前先生成查询语句,通过查询语句改变其字段名,同时进行动态的模糊查询。这里要说明的是页面是不能保留数据的,所以我们用到了应用对象Application来保留数据。
Step2aPage.vb 包含支持详细资料页面的代码。
Step2aPage.vb:
|
Imports System.DBNull Public Class Borrow Private Sub Data2bind() Private Sub LinkButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkButton1.Click Private Sub LinkButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkButton2.Click Private Sub LinkFind_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkFind.Click |
3 步: 选择
我们通过动态查询得到所需数据后,然后对其数据操作,这里实现读者借书的功能。
| Private Sub DataGrid1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGrid1.SelectedIndexChanged Dim dv As DataView = SelectTable.DefaultView() Dim dr As DataRow = SelectTable.NewRow() Dim ID, index As String Dim Name As String Label1.Visible = False index = DataGrid1.SelectedIndex() ID = DataGrid1.Items(index).Cells(1).Text dv.RowFilter = "ID='" + ID + "'" If dv.Count > 0 Then ' Response.Write(". 你已经选择了该行!") Label1.Visible = True Exit Sub End If dv.RowFilter = "" Name = DataGrid1.Items(index).Cells(2).Text dr(0) = ID dr(1) = Name SelectTable.Rows.Add(dr) Data2bind() End Sub |
向列集添加了一个新的列类型 ButtonColumn。该列在每行中生成 LinkButton,用于选择该行,而不是从该页进行浏览。列的 Command 属性设定为 Select。DataGrid 将 Select 作为一个标准命令,将包含被单击按钮的列选定。当用户选择该行时,先取得该行的值,如果该行已选择则提示信息,我们用过虑条件实现,所选择的行插入一临时表,且在另一DataGrid中显示。注意过虑之后应该设置过虑为空,否则得不到结果。
第 4 步: 删除
DataGrid 控件支持标准的列集,它提供一些基础的操作。诸如 BoundColumn、 ButtonColumn 和 TemplateColumn。我们利用ButtonColumn列实现删除功能。
| … Private Sub DataGrid2_DeleteCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid2.DeleteCommand Dim dv As DataView = SelectTable.DefaultView() Dim ID As String ID = e.Item.Cells(1).Text dv.RowFilter = "ID='" + ID + "'" If dv.Count > 0 Then dv.Delete(0) dv.RowFilter = "" Data2bind() End Sub |
第 5 步: 分页
设置DataGrid的分页方法有二种,一种是数字分页人,另一种是上下分页。实现方法是在属性栏中设置AutoPaging为true,在其属性生成器中设置分页类型。
结论
DataGrid 控件简化了多个常见 Web 应用情形,其中包括只读报表到交互式应用程序 UI。该控件优于传统的 ASP 编程。它将转换对象模型操作和数据绑定所需的逻辑封装进与浏览器无关的 HTML 表现功能。还将处理回传数据以及转换客户机事件的详细资料封状进服务器事件。
该控件设计用于无须作出太多开发努力就可以表现您的数据。随着应用要求的改变,以及您开始使用 DataGrid 的各种功能,您可以逐步添加其它功能。
| 共分1页 [1] |
关于网站 | 客服中心 | 服务条款 | 友情链接 | 广告联系 | 本站历程 | 网站导航
吉ICP备05000107号