ObjectDataSource
- 格式:doc
- 大小:933.50 KB
- 文档页数:19
使用ObjectDataSource 显示数据简介有了完整的应用程序体系结构和网站页面布局,我们就可以开始研究如何实现与任务相关的各种常用数据和报表。
前面的教程中,已经介绍了如何通过编程将来自DAL 和BLL 的数据绑定到 页面的Web 数据控件。
该语法是 1.x 应用程序使用的模式,可以在2.0 应用程序中继续使用。
它通过将获得的数据集赋值给Web数据控件的DataSource属性,然后调用DataBind()方法来显示数据。
并且, 2.0 新的数据源控件提供了新的声明方式来处理数据。
使用这些控件,无需编写一行代码就可以绑定通过前一教程创建的BLL 检索出的数据。
2.0 附带有五个内置数据源控件– SqlDataSource, AccessDataSource,ObjectDataSource,XmlDataSource, 和SiteMapDataSource –,但是,如果需要,用户仍然可以自己构建custom data source controls。
由于我们已经为教程应用程序开发了一个体系结构,因此我们将基于现有的BLL 类来使用ObjectDataSource。
图1: 2.0 包含五个内置数据源控件ObjectDataSource 充当协调其他对象的代理。
要配置ObjectDataSource,需要指定这个底层对象,需要指定该对象的方法如何映射到ObjectDataSource 的Select、Insert、Update 和Delete 方法。
一旦指定了底层对象,并且该对象的方法也映射到了ObjectDataSource 的对象,就可以将ObjectDataSource 绑定到Web 数据控件了。
附带了许多Web 数据控件,其中包括GridView、DetailsView、RadioButtonList 和DropDownList。
在页面的整个生命周期中,Web 数据控件可能需要访问它绑定的数据,这是通过调用它的ObjectDataSource 的Select 方法实现的;如果Web 数据控件支持插入、更新或删除,将执行对控件的ObjectDataSource 的Insert、Update 或Delete 方法的调用。
接着,通过ObjectDataSource 将这些调用发送到相应底层对象的方法,如下图所示。
图2: ObjectDataSource 充当代理了解了能够使用ObjectDataSource 调用插入、更新或删除数据的方法后,我们将关注返回数据;后续教程中将介绍使用ObjectDataSource 和Web 数据控件修改数据。
步骤1:添加和配置ObjectDataSource 控件首先,打开BasicReporting 文件夹中的SimpleDisplay.aspx 页面,切换到Design 视图,然后,将ObjectDataSource 控件从Toolbox 拖放到页面的设计界面。
在设计界面上ObjectDataSource 显示为一个灰色框,这是因为它还没有产生任何标记;通过调用来自指定对象的一个方法可以简单地访问数据。
通过Web 数据控件(例如GridView、DetailsView、FormView 等)可以显示由ObjectDataSource 返回的数据。
注意:或者,也可以先向页面添加 Web 数据控件,然后从它的智能标记的下拉列表选择<New data source> 选项。
要指定ObjectDataSource 的底层对象以及该对象的方法如何映射到ObjectDataSource 的对象,从ObjectDataSource 的智能标记单击Configure Data Source 链接。
图3: 从智能标记单击Configure Data Source 链接这将启动Configure Data Source 向导。
首先,必须首先指定与ObjectDataSource 绑定的对象。
如果"Show only data components" 复选框选中,则该屏幕的下拉列表中只列出具有DataObject 属性的那些对象。
当前列表包括Typed DataSet 的TableAdapters 和前面教程中创建的BLL 类。
如果之前忘记向业务逻辑层类添加DataObject 属性,则在列表看不到这些类。
这种情况下,取消对"Show only data components" 复选框的选中以便查看所有对象,这时将显示BLL 类(以及Typed DataSet 的其他类,如DataTables、DataRows 等)。
在第一个屏幕中,从下拉列表选择ProductsBLL 类,然后单击Next。
图4: 指定绑定到ObjectDataSource 控件的对象向导的下个屏幕提示用户选择ObjectDataSource 应调用的方法。
下拉列表列出了上个屏幕所选对象中返回数据的所有方法。
在此,看到GetProductByProductID、GetProducts、GetProductsByCategoryID 和GetProductsBySupplierID。
从下拉列表中选择GetProducts 方法,然后单击Finish(如果像前面教程中显示的,向ProductBLL 的方法添加了 DataObjectMethodAttribute,则默认选中该选项)。
图5: 从SELECT 选项卡选择Method for Returning Data人工配置ObjectDataSourceConfigure Data Source向导为我们配置ObjectDataSource提供了一个便捷的方式,通过该向导指定ObjectDataSource使用的对象,并且关联到对象所调用的方法。
并且,还可以通过ObjectDataSourc 的属性、或者通过Properties 窗口或直接使用声明标记来配置ObjectDataSource。
简单地将TypeName 属性设置为所使用的底层对象的类型,将SelectMethod 设置为检索数据时调用的方法。
<asp:ObjectDataSource ID="ObjectDataSource1"runat="server"SelectMethod="GetProducts"TypeName="ProductsBLL"></asp:ObjectDataSource>尽管你可能更喜欢使用Configure Data Source向导,但有时你还是需要手工配置ObjectDataSource,因为向导只列出了开发者创建的类。
如果想要将ObjectDataSource 绑定到 .NET Framework 中的类(如:要访问用户帐户信息,需要绑定到Membership 类;或者要处理文件系统信息,需要绑定到Directory 类,则需要手工设置ObjectDataSource 的属性。
步骤2:添加Web 数据控件并将其绑定到ObjectDataSource一旦向页面添加了ObjectDataSource 并且已经进行了配置,就可以向该页面添加Web 数据控件以显示由ObjectDataSource 的Select 方法返回的数据。
你可以将任何Web 数据控件绑定到ObjectDataSource;这里我们介绍用GridView、DetailsView 和FormView 显示ObjectDataSource 数据。
将GridView 绑定到ObjectDataSource从Toolbox 向SimpleDisplay.aspx 的设计界面添加GridView 控件。
从GridView 的智能标记,选择步骤1 中添加的ObjectDataSource 控件。
这将自动的在GridView中为数据的每个属性(即,由Products DataTable定义的属性)创建BoundField,而这些数据是由ObjectDataSource的Select方法所返回的。
图6: GridView 已经添加到页面,并且已经绑定到ObjectDataSource用户可以单击智能标记的Edit Columns 选项来定制、重新排列或删除GridView 的BoundFields。
图7: 通过Edit Columns 对话框来管理GridView 的BoundField需要一些时间来修改GridView 的BoundField,删除ProductID、SupplierID、CategoryID、QuantityPerUnit、UnitsInStock、UnitsOnOrder 和ReorderLevel BoundField。
简单地从左下角列表中选择BoundField 并单击删除按钮(红色X)来删除它们。
接着,通过选择这些BoundField 并单击向上箭头来重新排列这些BoundField,使CategoryName 和SupplierName BoundField 排在UnitPrice BoundField 的前面。
分别将剩余的BoundField 属性设置为Products、Category、Supplier 和Price。
接着,通过将BoundField 的HtmlEncode 属性设置为False,将它的DataFormatString 设置为{0:c},而将Price BoundField 格式设为为货币格式。
最后,通过ItemStyle/HorizontalAlign 属性将Price 水平靠右对齐,将Discontinued 复选框水平居中。
<asp:GridView ID="GridView1"runat="server"AutoGenerateColumns="False"DataKeyNames="ProductID"DataSourceID="ObjectDataSource1"EnableViewState="False"><Columns><asp:BoundField DataField="ProductName"HeaderT ext="Product"SortExpression="ProductNam e"/> <asp:BoundField DataField="CategoryName"HeaderT ext="Category"ReadOnly="True"SortExpression="CategoryNam e"/><asp:BoundField DataField="SupplierName"HeaderT ext="Supplier"ReadOnly="True"SortExpression="SupplierName"/><asp:BoundField DataField="UnitPrice"DataFormatString="{0:c}"HeaderT ext="Price"HtmlEncode="False"SortExpression="UnitPrice"><ItemStyle HorizontalAlign="Right"/></asp:BoundField><asp:CheckBoxField DataField="Discontinued"HeaderT ext="Discontinued"SortExpression="Discontinued"> <ItemStyle HorizontalAlign="Center"/></asp:CheckBoxField></Columns></asp:GridView>图8: 已经定制了BoundField 的GridView使用主题(Themes)保持显示风格的一致这些教程力争避免任何控件级的样式设置,尽可能的使用外部文件定义的级联样式表。