• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 在ASP.NET 2.0中操作数据之三十二:数据控件的嵌套

在ASP.NET 2.0中操作数据之三十二:数据控件的嵌套

作者:heker2007 字体:[增加 减小] 来源:互联网 时间:2017-05-11

heker2007通过本文主要向大家介绍了分页控件 asp.net,表格控件 asp.net,用户控件 asp.net,日期控件 asp.net,js获取asp.net控件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

导言

  除了静态HTML和数据绑定语法,template也可以包含Web控件和用户控件.这些控件的属性可以通过声明语法,数据绑定语法或在服务器端通过事件处理编程来设置.

  通过将控件嵌入到template里,可以自定义界面,提升用户体验.例如,在在GridView控件中使用TemplateField 里,我们学习了如何通过在GridView的TemplateField里加一个Calendar控件来表示员工的雇佣日期.在给编辑和新增界面增加验证控件 和定制数据修改界面 里,我们学习了如何通过添加验证控件, TextBox,DropDownList和其它Web控件来自定义编辑,插入界面.

  Template也可以包含其它数据控件.即,我们可以让DataList在Template里包含其它DataList(或者Repeater,GridView,DetailsView等).这个工作的挑战在于将数据绑定到里面的数据控件上.有几种不同的方法可以实现,包括从使用ObjectDataSource的声明语言到直接编程.

  在本章里我们将探索如何使用嵌套的Repeater.外层的Repeater将每个category显示为一个item,包含category的name和description.每个category的item里的Repeater显示此category下的每个product(见图1).我们将分别学习如何通过声明和编程的方法创建内层的Repeater.

http://files.weikejianghu.com/file_images/article/201605/2016050911243563.png
图1: Category和属于它的Product一起被列出

第一步: 创建Category列表

  当创建一个使用嵌套数据控件的页时,我发现开始从最外层的控件的设计,创建和测试开始非常的有帮助,这个时候不用管内层嵌套的控件.因此,我们首先实现往页面里添加一个Repeater来列出category的name和description.

  打开DataListRepeaterBasics文件夹里的NestedControls.aspx页.添加一个Repeater控件,将ID设为CategoryList..通过它的智能标签,选择创建一个新的名为CategoriesDataSource的ObjectDataSource.

http://files.weikejianghu.com/file_images/article/201605/2016050911243564.png
图 2: 创建一个名为CategoriesDataSource的ObjectDataSource

用CategoriesBLL类的GetCategories方法配置O

http://files.weikejianghu.com/file_images/article/201605/2016050911243565.png
图3: 用CategoriesBLL类的GetCategories方法配置ObjectDataSource

  我们需要切换到源视图来手动输入声明代码指定Repeater的template内容.增加一个带<h4>的name和<p>的description的ItemTemplate.用<hr>将category分开.在作完这些后,你的页面代码里的Repeater和ObjectDataSource声明语言应该和下面差不多:

<asp:Repeater ID="CategoryList" DataSourceID="CategoriesDataSource"
 EnableViewState="False" runat="server">
 <ItemTemplate>
  <h4><%# Eval("CategoryName") %></h4>
  <p><%# Eval("Description") %></p>
 </ItemTemplate>
 <SeparatorTemplate>
  <hr />
 </SeparatorTemplate>
</asp:Repeater>
<asp:ObjectDataSource ID="CategoriesDataSource" runat="server"
 OldValuesParameterFormatString="original_{0}"
 SelectMethod="GetCategories" TypeName="CategoriesBLL">
</asp:ObjectDataSource>
</div>

图4 表示现在在浏览器里浏览这个页.

http://files.weikejianghu.com/file_images/article/201605/2016050911243566.png
图 4:列出每个Category的 Name 和Description , 用水平线隔开

第二步: 增加嵌套的Repeater显示Product

  下一步我们的任务是在CategoryList的ItemTemplate里添加一个Repeater用来显示属于各个category下的product.有很多方法可以存取内层的Repeater数据,我们将探讨两种现在我们在CategoryList Repeater的ItemTemplate里创建product Repeater.每个product里将包含name和price我们将下面的标记加到CategoryList的ItemTemplate里:

<asp:Repeater ID="ProductsByCategoryList" EnableViewState="False"
 runat="server">
 <HeaderTemplate>
  <ul>
 </HeaderTemplate>
 <ItemTemplate>
  <li><strong><%# Eval("ProductName") %></strong>
   (<%# Eval("UnitPrice", "{0:C}") %>)</li>
 </ItemTemplate>
 <FooterTemplate>
  </ul>
 </FooterTemplate>
</asp:Repeater>
</div>

第三步: 将各Category下的Product绑定到 ProductsByCategoryList Repeater

  如果现在你浏览这个页,你会看到象图4一样的页面,因为我们还没有在Repeater里绑定任何数据.有几种方法可以将合适的product记录绑定到Repeater里,其中一些会比较有效.现在主要的任务是为指定category取到合适的product.可以通过在ItemTemplate里语法声明ObjectDataSource或者直接在后台代码编程来将数据绑定到内层的Repeater.

  通过ObjectDataSource和ItemDataBound来获取数据

  这里我们还是用ObjectDataSource来实现.ProductsBLL类的GetProductsByCategoryID(Category)
方法可以返回特定CategoryID的products信息.因此,我们将在CategoryList Repeater的ItemTemplate里新建一个ObjectDataSource,并用这个方法配置它.不幸的,Repeater不允许通过设计视图来修改template,因此我们需要手动添加将声明语法.见下面的代码:

<h4><%# Eval("CategoryName") %></h4>
<p><%# Eval("Description") %></p>
<asp:Repeater ID="ProductsByCategoryList" EnableViewState="False"
  DataSourceID="ProductsByCategoryDataSource" runat="server">
 <HeaderTemplate>
  <ul>
 </HeaderTemplate>
 <ItemTemplate>
  <li><strong><%# Eval("ProductName") %></strong> -
    sold as <%# Eval("QuantityPerUnit") %> at
    <%# Eval("UnitPrice", "{0:C}") %></li>
 </ItemTemplate>
 <FooterTemplate>
  </ul>
 </FooterTemplate>
</asp:Repeater>
<asp:ObjectDataSource ID="ProductsByCategoryDataSource" runat="server"
   SelectMethod="GetProductsByCategoryID" TypeName="ProductsBLL">
 <SelectParameters>
  <asp:Parameter Name="CategoryID" Type="Int32" />
 </SelectParameters>
</asp:ObjectDataSource>
</div>

  当使用ObjectDataSource方法时我们需要设置ProductsByCategoryList Repeater的DataSourceID为ObjectDataSource(ProductsByCategoryDataSource).注意ObjectDataSource有一个<asp:Parameter>来指定传给GetProductsByCategoryID(categoryID)的categoryID.但是我们怎么来指定这个值呢?我们可以设置DefaultValue属性为<asp:Parameter>,见下面的代码:

<asp:Parameter Name="CategoryID" Type="Int32"
  DefaultValue='<%# Eval("CategoryID")' />
</div>

  不幸的,数据绑定语法只能用在有DataBinding事件的控件里.Parameter类没有这样的事件,因此这样使用会出错.我们需要为CategoryList Repeater的ItemDataBound创建一个事件处理来设置这个值.每个item绑定到Repeater时激发ItemDataBound事件.因此每次外层的Repeater激发这个时间时,我们可以将当前的CaegoryID的值传给ProductsByCategoryDataSource ObjectDataSource的CategoryID参数.下面的代码是为CategoryList Repeater的ItemDataBound创建一个event handler:

protected void CategoryList_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
 if (e.Item.ItemType == ListItemType.AlternatingItem ||
  e.Item.ItemType == ListItemType.Item)
 {
  // Reference the CategoriesRow object being bound to this RepeaterItem
  Northwind.CategoriesRow category =
   (Northwind.CategoriesRow)((System.Data.DataRowView)e.Item.DataItem).Row;
  // Reference the ProductsByCategoryDataSource ObjectDataSource
  ObjectDataSource ProductsByCategoryDataSource =
   (ObjectDataSource)e.Item.FindControl("ProductsByCategoryDataSource");
  // Set the CategoryID Parameter value
  ProductsByCategoryDataSource.SelectParameters["CategoryID"].DefaultValue =
   category.CategoryID.ToString();
 }
} 
    &
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ASP.NET数据绑定控件详解
  • asp.net webform自定义分页控件
  • asp.net分页控件使用详解【附实例下载】
  • 解析asp.net的分页控件
  • ASP.NET同步分页MvcPager使用详解
  • ASP.Net分页的分页导航实例
  • ASP.Net分页的分页导航实例
  • asp.net使用FCK编辑器中的分页符实现长文章分页功能
  • ASP.NET中控件的EnableViewState属性及彻底禁用
  • ASP.NET的广告控件AdRotator用法分析

相关文章

  • 2017-05-11.NET中如何将文本文件的内容存储到DataSet
  • 2017-05-11微信公众平台开发之获得ACCESSTOKEN .Net代码解析
  • 2017-05-11asp.net下获取远程网页的内容之二(downmoon原创)
  • 2018-08-20详解在Azure上部署Asp.NET Core Web App
  • 2017-05-11Asp.net静态方法之Grid转DataTable方法实现步骤
  • 2017-05-11asp.net中Response.Redirect与Server.Transfer的区别分析
  • 2017-05-11详解ASP.NET MVC的筛选器
  • 2018-08-20.Net Core使用OpenXML导出、导入Excel
  • 2017-05-11asp.ne去除html的函数代码
  • 2017-05-11C#中HTML字符转换函数分享

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 五步掌握OOM框架AutoMapper基本使用
    • 自己常用到的自定义公共类(已测试通过)
    • asp.net中EXCEL数据导入到数据库的方法
    • asp.net与excel互操作实现代码
    • 几种using 的用法小结
    • 在asp.NET 中使用SMTP发送邮件的实现代码
    • ASP.NET笔记之Session、http、web开发原则、xss漏洞的详细介绍
    • asp.net 数据库连接池浅析
    • C# new和override的区别分析
    • asp.net(C#)生成无限级别菜单

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有