330 likes | 532 Views
数据 显示技术. 内容摘要. 越来越多的 Web 应用程序需要与数据源中的数据进行交互。 ASP.NET 3.5 对旧版本中数据显示上的不足进行了改进,主要体现在数据访问和显示的简单化、智能化、多样化、以及提高数据显示的效率和性能等方面。 ASP.NET 的 数据源控件 用于创建数据源,用 数据显示控件 将数据源控件的数据显示到页面上。 ASP.NET 3.5 中提供了很多显示控件,像 GridView 控件和 Repeater 控件等,其中最明显、重要的改变是新增了 ListView 和 DataPager 数据显示控件。. 学习目标. 了解数据源控件
E N D
内容摘要 越来越多的Web应用程序需要与数据源中的数据进行交互。ASP.NET 3.5对旧版本中数据显示上的不足进行了改进,主要体现在数据访问和显示的简单化、智能化、多样化、以及提高数据显示的效率和性能等方面。 ASP.NET的数据源控件用于创建数据源,用数据显示控件将数据源控件的数据显示到页面上。ASP.NET 3.5中提供了很多显示控件,像GridView控件和Repeater控件等,其中最明显、重要的改变是新增了ListView和DataPager数据显示控件。
学习目标 • 了解数据源控件 • 理解SqlDataSource数据源控件的使用 • 理解数据绑定语法 • 熟练掌握ListView控件 • 熟练掌握ListView控件模板 • 熟练掌握ListView控件内置功能 • 熟练运用DataPager分页控件 • 熟练运用GridView控件显示、分页和操作数据 • 熟练运用模板类数据绑定控件
9.1 数据源控件 数据源控件从ASP.NET 2.0开始引入的服务器控件,在ASP.NET 3.5中还新增了一种数据源控件即LinqDataSource。他们是数据绑定体系结构的一个关键部分。 这些数据源控件允许使用不同类型的数据源,如数据库、XML文件或中间层业务对象。数据源控件连接到数据源,从中检索数据,并使得其他控件可以绑定到数据源而无需代码。 ASP.NET 3.5中提供了多种数据源控件,他们分别是:SqlDataSource、AccessDataSource、XmlDataSource、ObjectDataSource、SiteMapDataSource、LinqDataSource和EntityDataSource。
9.1.1 ObjectDataSource控件 ObjectDataSource数据源控件,用于向数据绑定控件表示数据识别中间层对象或数据接口对象。可以使用ObjectDataSource控件与数据绑定控件在ASP.NET页面上显示数据,这样,只要用少量代码或不用代码就可以在网页上显示、编辑和排序数据。 大多数ASP.NET数据源控件,如SqlDataSource,都在两层应用程序层次结构中使用。在该层次结构中,表示层(ASP.NET网页)可以与数据层(数据库和XML文件等)直接进行通信,而ObjectDataSource控件使开发人员能够在保留他们的三层应用程序结构的同时,使用ASP.NET数据源控件。
9.1.1 ObjectDataSource控件 ObjectDataSource控件可以看作是数据库的代理。通过配置ObjectDataSource指定这些底层的对象,还有这些对象的方法如何映射到ObjectDataSource的SELECT、INSERT、UPADTE和DELETE方法。一旦底层的对象被指定并且其方法映射到ObjectDataSource的方法后,我们就可以把ObjectDataSource绑定到页面上的数据控件。ASP.NET提供了许多数据控件,包括GridView、DetailsView等等。在页面的生命周期中,数据控件可能需要访问他所绑定的数据,这将通过调用ObjectDataSource的Select方法来实现;如果这个数据服务器控件还支持插入、更新或者删除,那么将调用ObjectDataSource的INSERT、UPDATE或者DELETE方法。这些调用会通过ObjectDataSource被发送到适当的底层对象的方法。
9.1.2 AccessDataSource控件 AccessDataSource控件是使用Microsoft Access数据库的数据源,并且通过使用SQL语句对数据库记录实现操作。AccessDataSource数据源控件从根本上讲是一个SQL数据源控件,只不过是针对Access数据库进行了优化。AccessDataSource控件有两种不同的数据源模式,DataSet和DataReader。具体使用哪种模式取决于检索数据的ADO.NET类。只有在获取操作返回一个DataSet时才能对所选的数据应用过滤。
9.1.3 SqlDataSource控件 SqlDataSource数据源控件用于表示绑定到数据绑定控件的SQL关系的数据库中。将SqlDataSource控件与数据绑定控件一起使用,可以从关系数据库中检索数据库中的数据,还可以显示数据记录、对数据进行排序编辑等,不必或只须编写少量的代码。SqlDataSource的应用非常广泛,可以用于从任何OLE DB或者符合ODBC的数据源中检索数据,甚至还能够访问Oracle数据库。当SqlDataSource控件和数据绑定控件集成后,能够很容易的将从数据源获取的数据显示在Web页面上。实现数据源显示在Web页面上只须要为SqlDataSource设置数据库连接字符串、SQL语句、存储过程名称即可。
9.1.3 SqlDataSource控件 建立数据存储连接主要有两个属性ConnectionString和ProviderName。ConnectionString属性表示连接字符串,ProviderName属性规定此操作使用的ADO.NET托管提供程序的命名控件。ProviderName属性默认为System.Data.SqlClient,这表示默认的数据存储在SQL Server中。例如要使用OLE DB提供程序,则使用System.Data.OleDb字符串。
9.1.3 SqlDataSource控件 • SqlDataSource数据源控件语法格式 • SqlDataSource数据源控件即可以使用数据适配器也可以使用命令对象检索数据。根据不同选择,将获取的数据封装到一个DataSet对象或一个数据阅读器中。如下代码说明绑定到SQL Server数据库的SQL数据源控件所须要的代码: • <asp:SqlDataSource ID="SqlDataSource1" runat="server" • ConnectionString="<%$ ConnectionStrings:ConnectionString %>" • SelectCommand="SELECT * FROM [UserInfo]"> • </asp:SqlDataSource>
9.1.3 SqlDataSource控件 • SqlDataSource数据源控件操作 • 通过SqlDataSource数据源控件,可以对数据库中的数据进行更新、删除和插入,也就是执行SQL里的Update、Delete和Insert功能。
9.2 绑定语法 ASP.NET 3.5引入声明数据绑定语法。这种非常灵活的语法允许开发人员不仅可以绑定到数据源,而且可以绑定到简单属性、集合、表达式甚至是从方法调用返回的结果。 数据绑定表达式包含在<%# %>分隔符之内,并使Eval和Bind函数。Eval函数用于定义单向(只读)绑定。Bind函数用于定义双向(可更新)绑定。除了通过在数据绑定表达式中调用Eval和Bind方法执行数据绑定外,还可以调用<%# %>分隔符之内的任何公共范围代码,在页面处理过程中执行并返回一个值。
9.2.1 绑定简单属性 简单属性的绑定语法如下: Customer: <%# custID %>
9.2.2 绑定集合 绑定语法如下所示: Orders <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server">
9.2.3 绑定表达式 像GridView、ListBox和DropDownList这样的列表服务器控件将集合用作数据源。下面的示例说明如何将集合的值绑定到表达式中使用。最常见的是绑定ArrayList、DataView和DataReader。绑定语法如下所示: Contact <%# ( customer.FirstName + " " + customer.LastName ) %>
9.2.4 方法的返回值 绑定语法如下所示: Outstanding Balance: <%# GetBalance(custID) %>
9.3 新增控件ListView ASP.NET 3.5中包含了新增的数据绑定控件ListView,ListView控件可以说是Repeater与GridView结合的控件,实现添加、删除等功能。同时还可以像Repeater一样灵活的控制页面布局。该控件包含了很多新的模板,例如GroupTemplate等新增的模板,可以方便的分组显示数据。ListView控件本身并不提供分页功能,但可以使用ASP.NET 3.5中另一个新增的控件DataPager实现分页功能。把分页的功能单独放到另一个控件里,能够给编程带来很大的方便,比如说可以让别的控件使用他,也可以把他放到页面的任何地方。实质上,DataPager控件就是一个扩展ListView分页功能的控件。
9.3.1 ListView控件属性和事件 ListView控件用于显示数据源中数据的值,跟GridView控件很类似。GridView所能实现的功能该控件都能实现,不同的是ListView控件使用用户自定义的模板而不是行字段来显示数据,并且ListView控件的分页功能不是内置的功能,而是通过使用DataPager控件来实现分页功能的。 既然ListView控件内置了这么多功能,肯定有很多属性、方法和事件,当然该控件这些成员有很多给其他数据绑定控件相同的成员,在本章节中这些成员就不再介绍,只介绍一些对本控件常用的一些属性和事件。
9.3.2 显示数据 • ListView控件是一个非常灵活的控件,这是因为ListView控件提供了很多模板。通过定义ListView的模板几乎可以实现任意一种数据展现方式,从这一点来说ListView控件和DataList控件和Repeater控件很相似,与这些控件不同的是,ListView控件允许用户编辑、插入和删除数据,以及对数据进行排序和分页。下面对ListView控件可用模板介绍如下: • LayoutTemplate标识定义控件的主要布局的根模板。 • ItemTemplate标识要为各个项显示的数据绑定内容 • ItemSeparatorTemplate标识要在各个项之间呈现的内容。
9.3.2 显示数据 • GroupTemplate标识组布局的内容。 • GroupSeparatorTemplate标识要在项组之间呈现的内容。 • EmptyItemTemplate标识在使用GroupTemplate模板时为空项呈现的内容。 • EmptyDataTemplate标识在数据源未返回数据时要呈现的内容。 • SelectedItemTemplate标识为区分所选数据项与显示的其他项,而为该所选项呈现的内容。 • AlternatingItemTemplate标识为便于区分连续项,而为交替项呈现的内容。 • EditItemTemplate标识要在编辑项时呈现的内容。 • InsertItemTemplate标识要在插入项时呈现的内容。
9.3.2 显示数据 在ListView控件中创建LayoutTemplate模板,可以定义ListView控件显示数据布局。LayoutTemplate必须包含一个充当数据占位符的控件。例如,该布局模板可以包含ASP.NET Table、Panel或Label控件,他还可以包含runat属性设置为server的table、div或span元素。这些控件将包含ItemTemplate模板所定义的每个项的输出,如果为显示数据分组的话,可以在GroupTemplate模板定义的内容中对这些输出进行分组。
9.3.2 显示数据 使用GroupTemplate模板,可以选择对ListView控件中的项进行分组。对项分组通常是为了创建平铺的表布局。在平铺的表布局中,各个项将在行中重复GroupItemCount属性指定的次数。为创建平铺的表布局,布局模板可以包含ASP.NET Table控件以及将runat属性设置为“server”的HTML table元素。随后,组模板可以包含ASP.NET TableRow控件或HTML tr元素。而项模板可以包含ASP.NET TableCell控件中的各个控件。
9.3.3 编辑数据 在ListView控件中通过模板还可以实现对数据的编辑、插入或删除操作。该控件为这些操作分别提供了模板,只要使用这些模板,用户就可以对数据进行操作。 如果在ListView控件中添加了InsertItemTemplate模板,用户就可以在ListView控件中插入数据,该模板和EditItemTemplate相似之处在于,这两个模板都应该包含一些数据绑定控件,允许用户编辑。InsertItemTemplate模板呈现在所显示项的开始或末尾。通过使用ListView控件的InsertItemPosition属性,可以指定InsertItemTemplate模板的呈现位置。 只创建了这些模板还是远远不够的,通常还要在模板上添加一些按钮,以允许用户执行指定的操作,如可以在模板中添加CommandName值为Delete的按钮,以便用户可以进行删除操作。在ListView控件中内置了针对CommandName值的行为。
9.3.3 编辑数据 • 通过设置按钮的CommandName属性,可以定义按钮将执行的操作,下面对这些内置值行为进行介绍,如下所示: • Select 显示所选项的SelectedItemTemplate模板的内容。 • Insert 在InsertItemTemplate模板中,指定应将数据绑定控件的内容保存在数据源中。 • Edit 指定ListView控件应切换到编辑模式,并使用EditItemTemplate模板显示项。 • Update 在EditItemTemplate模板中,指定应将数据绑定控件的内容保存在数据源中。 • Delete 从数据源中删除项。 • Cancel 取消当前操作。 • 自定义值默认情况下,不执行任何操作。
9.3.3 使用DataPager控件实现分页 • 如果想为ListView增加分页功能的话,那么就须要使用DataPager控件了。ASP.NET 3.5新增的DataPager控件主要用于ListView控件的分页,是新增的分页控件,可以方便高效的进行分页。这个分页控件是一个独立的控件,可以把他放到页面的任何位置,然后使其联到ListView控件就可以完成分页实现。 • 为了使DataPager控件显示导航控件,必须向该控件添加页导航字段,该控件共包含如下3字段: • NextPreviousPagerField用户能够逐页浏览页面,或跳到第一页或最后一页。 • NumericPagerField用户能够按照页码选择页面。 • TemplatePagerField可以创建自定义分页UI。
9.4 其他数据绑定控件 ASP.NET提供了很多种服务器控件,用于在Web页面上绑定数据显示。这些服务器控件可以以丰富的表现形式将数据显示在页面中,除了上节讲解的新增ListView控件外,还有一些复杂数据绑定控件。例如:DetailsView控件、FormView控件、Repeater控件、DataList控件和GridView控件等。
9.4.1 DetailsView控件 DetailsView控件可以将数据源中单条记录的值显示在表中,该控件中的一个数据行表示该记录的一个字段。使用DetailsView控件,可以从他的关联数据源中一次显示、编辑、插入或删除一条记录。默认情况下,DetailsView控件将记录的每个字段显示在他自己的一行内。即使DetailsView控件的数据源公开了多条记录,该控件一次也仅显示一条数据记录。DetailsView控件依赖于数据源控件的功能执行诸如更新、插入和删除记录等任务。
9.4.1 DetailsView控件 • DetailsView控件提供了以下两种用于绑定到数据的方式: • 使用DataSourceID属性进行数据绑定,此选项能够将DetailsView控件绑定到数据源控件。建议使用此选项,因为他允许DetailsView控件利用数据源控件的功能提供的内置的更新和分页功能。 • 使用DataSource属性进行数据绑定,此方法须要为任务附加功能编写代码。
9.4.2 GridView控件 • GridView控件用来在表中显示数据源的值。每列表示一个字段,而每行表示一条记录。GridView控件提供了很多内置功能,使程序员写很少的代码或者是不写代码,就能设计出列出数据的表并且可以编辑、多选、排序和删除等。还可以通过设置该控件的外观属性,使其呈现出不同风格的外观。 • 具体来说可以对GridView控件进行一下操作: • 可以和数据源控件进行绑定,然后自动的以表格的形式显示在ASP.NET页面上。 • 通过数据源控件对数据进行选择、分页、编辑和删除。 • 程序员还可以以编程的方式访问或设置GridView控件属性, 并可以处理事件添加到GridView的功能里。 • 可以通过主题和样式进行自定义GridView控件外观。 • 可以利用模板创建自定义的用户界面元素。
9.4.3 FormView、Repeater和DataList控件 FormView控件与DetailsView控件类似,可以使用数据源中的单个记录。FormView控件和DetailsView控件之间的差别在于DetailsView控件使用表格布局,在该布局中,记录的每个字段都各自显示为一行。而FormView控件不指定用于显示记录的预定义布局,而将创建一个模板,其中包含用于显示记录中的各个字段的控件。该模板中包含用于创建窗体的格式、控件和绑定表达式。由于该控件与DetailView控件非常的类似,在此就不在多讲解该控件。
9.4.3 FormView、Repeater和DataList控件 Repeater控件是一个数据绑定容器控件,用于生成各个项的列表。他使用模板来定义网页上的各个项的布局,当该运行时,再为数据源中的每个项重复此布局。由于Repeater控件没有默认的外观,因此可以使用该控件创建许多种列表,如:表布局、逗号分割的列表和Xml格式的列表等。同时因为Repeater没有默认的外观,所以Repeater控件显示数据时,必须先创建模板来绑定数据列表。模板可以包含标记和控件的任意组合。如果未定义模板,或者模板都不包含元素,则当应用程序运行时,该控件不显示在页上。Repeater控件具有ListView控件的5种模板,分别是ItemTemplate、AlternatingItemTemplate、HeaderTemplate、FooterTemplate和SeparatorTemplate模板。他们的作用与ListView控件相同。
9.4.3 FormView、Repeater和DataList控件 DataList控件以表的形式显现数据,通过该控件,可以使用不同的布局来显示数据记录,例如,将数据记录排成列或行的形式。可以对DataList控件进行配置,使用户能够编辑或删除表中的记录。(DataList控件不使用数据源控件的数据修改功能,必须自己提供此代码。)从这些方面来看和Repeater控件很相似,不过DataList控件除了可以将数据依照我们所制定的模板显示出来外,还可以进行Repeater控件无法作到的分列显示数据、选择和数据编辑,这一点与GirdView相似。 DataList所能定义的模板,除了Repeater控件所能创建的模板外,还有两种模板,分别介绍如下:
9.4.3 FormView、Repeater和DataList控件 • SelectedItemTemplate包含一些元素,当用户选择DataList控件中的某一项时将呈现这些元素。通常,可以使用此模板来通过不同的背景色或字体颜色直观地区分选定的行。还可以通过显示数据源中的其他字段来展开该项。 • EditItemTemplate指定当某项处于编辑模式中时的布局。此模板通常包含一些编辑控件,如TextBox控件。