加入收藏 | 设为首页 | 会员中心 | 我要投稿 宁德站长网 (https://www.0593zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

在ASP.NET 2.0中操作数据之五十六:使用ObjectDataSource缓存数

发布时间:2016-11-23 22:27:45 所属栏目:MsSql教程 来源:站长网
导读:导言 就计算机科学而言,caching就是将所需要的数据或信息的备份放在某个地方,便于快速访问的这样一个过程。以数据处理(data-driven)程序为例,程序的大部分时间浪费在数据查询上。要提升这种程序的性能,通常的做法是将查询结果存放在程序的存储器里。

  在本页面,我们要创建一个允许编辑的GridView控件,当ObjectDataSource控件里的缓存数据发生改变时,我们可以通过GridView的界面查看到底会发生什么。在SELECT标签里选择默认的GetProducts()方法, 但是在UPDATE标签里选择接受productName, unitPrice 和productID作为输入参数的UpdateProduct()重载方法。

/uploads/allimg/c161121/14OI94614KF-1H5022.png
图5:在UPDATE标签里选择重载的UpdateProduct()方法

  最后,在INSERT和DELETE标签里选择“(None)”,点完成按钮。一旦完成“设置数据源向导”,Visual Studio会将ObjectDataSource控件的OldValuesParameterFormatString属性设置为original_{0}。就像在前面的教程之16章《概述插入、更新和删除数据》里探讨的一样,该属性要么删除掉,要么设置为{0},不然的话更新操作会报错。

  此外,完成向导后,Visual Studio会将产品的所有数据列添加到GridView控件,将除了ProductName, CategoryName和UnitPrice之外的所有绑定列(BoundFields)删除。然后,分别将上述3列的HeaderText属性改为Product”, “Category”和“Price”。由于ProductName是必需的,将ProductName列转变成模板列(TemplateField),在EditItemTemplate里添加一个RequiredFieldValidator控件;同样的,将UnitPrice列也转换成模板列,并添加一个CompareValidator控件,确保用户输入的是大于或等于0的有效的货币值。除此以外,你还可以作一些界面上的改进,比如使UnitPrice值居中,或分别对UnitPrice的只读和编辑界面作一些格式化的处理。

  在GridView的智能标签里点相关项启动编辑、分页、排序功能。

  注意:想回顾怎样自定义GridView的编辑界面吗?请参考前面的文章之20《定制数据修改界面》 

/uploads/allimg/c161121/14OI9461L50-1I6202.png
图6:启用GridView的编辑、排序、分页功能。

完成GridView的修改后,GridView 和 ObjectDataSource的代码声明看起来像下面这样:

<asp:GridView ID="Products" runat="server" AutoGenerateColumns="False"
 DataKeyNames="ProductID" DataSourceID="ProductsDataSource"
 AllowPaging="True" AllowSorting="True">
 <Columns>
 <asp:CommandField ShowEditButton="True" />
 <asp:TemplateField HeaderText="Product" SortExpression="ProductName">
 <EditItemTemplate>
 <asp:TextBox ID="ProductName" runat="server"
 Text='<%# Bind("ProductName") %>'></asp:TextBox>
 <asp:RequiredFieldValidator
 ID="RequiredFieldValidator1" Display="Dynamic"
 ControlToValidate="ProductName" SetFocusOnError="True"
 ErrorMessage="You must provide a name for the product."
 runat="server">*</asp:RequiredFieldValidator>
 </EditItemTemplate>
 <ItemTemplate>
 <asp:Label ID="Label2" runat="server"
 Text='<%# Bind("ProductName") %>'></asp:Label>
 </ItemTemplate>
 </asp:TemplateField>
 <asp:BoundField DataField="CategoryName" HeaderText="Category"
 ReadOnly="True" SortExpression="CategoryName" />
 <asp:TemplateField HeaderText="Price" SortExpression="UnitPrice">
 <EditItemTemplate>
 $<asp:TextBox ID="UnitPrice" runat="server" Columns="8"
 Text='<%# Bind("UnitPrice", "{0:N2}") %>'></asp:TextBox>
 <asp:CompareValidator ID="CompareValidator1"
 ControlToValidate="UnitPrice" Display="Dynamic"
 ErrorMessage="You must enter a valid currency value with no
 currency symbols. Also, the value must be greater than
 or equal to zero."
 Operator="GreaterThanEqual" SetFocusOnError="True"
 Type="Currency" runat="server"
 ValueToCompare="0">*</asp:CompareValidator>
 </EditItemTemplate>
 <ItemStyle HorizontalAlign="Right" />
 <ItemTemplate>
 <asp:Label ID="Label1" runat="server"
 Text='<%# Bind("UnitPrice", "{0:c}") %>' />
 </ItemTemplate>
 </asp:TemplateField>
 </Columns>
</asp:GridView>

<asp:ObjectDataSource ID="ProductsDataSource" runat="server"
 OldValuesParameterFormatString="{0}" SelectMethod="GetProducts"
 TypeName="ProductsBLL" UpdateMethod="UpdateProduct">
 <UpdateParameters>
 <asp:Parameter Name="productName" Type="String" />
 <asp:Parameter Name="unitPrice" Type="Decimal" />
 <asp:Parameter Name="productID" Type="Int32" />
 </UpdateParameters>
</asp:ObjectDataSource>

如图7所示,GridView列出了每个产品的name, category和price信息。花几分钟测试页面—对结果排序,查看分页,编辑某条记录。

/uploads/allimg/c161121/14OI94620C20-1J41Q.png
图7:显示每条记录的Name, Category和Price信息

第三步:考察ObjectDataSource如何请求数据

  ID为Products的GridView通过调用名为ProductsDataSource的ObjectDataSource的Select()方法检索数据并将它显示出来。该ObjectDataSource创建业务逻辑层的ProductsBLL class类的一个实例并调用它的GetProducts()方法,该方法又调用数据访问层ProductsTableAdapter的GetProducts()方法。数据访问层连接到数据库Northwind,并执行已设置好了的SELECT查询。查询数据以NorthwindDataTable的形式返回到数据访问层,该DataTable对象再依次传回到业务逻辑层,ObjectDataSource、GridView控件。GridView控件为DataTable里的每一数据行(DataRow)创建一个GridViewRow对象,每个GridViewRow对象最终被编译为HTML返回到客户端,呈现在访问者的浏览器里。

(编辑:宁德站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读