使用嵌套的Repeater控件显示分级数据

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-08-03

   一 简介

  本文描述如何使用嵌套的Repeater 控件来显示分级数据 当然了 你也可以将这一技术应用到其他的列表绑定控件上去 比如DataGrid包含DataGrid DataList包含DataList等等的组合

   二 绑定到父表

   添加一个新的Web Form 到应用程序项目中 名称为Nestedrepeater aspx    从工具箱托动一个Repeater 控件到这个页面上 设定其ID 属性为 parent    切换到HTML 视图    选中下列<itemtemplate> 代码 复制到Repeater 控件对应的位置 注意 粘贴的时候请使用 粘贴为 功能 这些语句包含了数据绑定语法 很简单

<itemtemplate><b><%# DataBinder Eval(Container DataItem au_id ) %></b><br></itemtemplate>

   打开Nestedrepeater aspx cs 这个代码分离文件 降下列代码添加到Page_Load 事件中 其作用是建立一个到 Pubs (这个数据库是sql server的演示数据库 另外在安装 net framework sdk的时候也会安装这个数据库)数据库的连接 并绑定Authors 表到Repeater 控件

public void Page_Load(){ SqlConnection cnn = new SqlConnection( server=(local);database=pubs;uid=sa;pwd=; ); SqlDataAdapter cmd = new SqlDataAdapter( select * from authors cnn);  DataSet ds = new DataSet();  cmd Fill(ds authors );

  //这里将要插入子表的数据绑定

  parent DataSource = ds Tables[ authors ];  Page DataBind(); cnn Close();} 

   在文件的头部添加下面的名称空间   using System Data SqlClient;   根据你自己的情况修改一下连接字符串    保存并编译应用程序    在浏览器中打开这个页面 输出结果类似于下面的格式

 

   三 绑定到子表

   在页面的HTML视图中 添加下列代码 其目的是增加子Repeater 控件到父Repeater的项目模板中 形成嵌套

<asp:repeater id= child runat= server ><itemtemplate><%# DataBinder Eval(Container DataItem [\ title_id\ ] ) %><br></itemtemplate></asp:repeater>

   设置子Repeater 控件的DataSource 属性:

<asp:repeater datasource= <%# ((DataRowView)Container DataItem) Row GetChildRows( myrelation ) %> >

   在页面顶部添加下列指令(请注意 是在 aspx文件中):

  <%@ Import Namespace= System Data %>

  在 cs文件中 将Page_Load中的注释部分(//这里将要插入子表的数据绑定)替换成下列代码:

SqlDataAdapter cmd = new SqlDataAdapter( select * from titleauthor cnn);cmd Fill(ds titles );ds Relations Add( myrelation ds Tables[ authors ] Columns[ au_id ] ds Tables[ titles ] Columns[ au_id ]);

   保存并编译应用程序    在浏览器中察看修改后的页面 显示格式类似于下面的格式:

PS BU BU PC BU TC  

   四 完整的代码

Nestedrepeater aspx <%@ Page Language=C# Inherits= yourprojectname nestedrepeater %><%@ Import Namespace= System Data %>

<><body><form runat=server>

<! start parent repeater ><asp:repeater id= parent runat= server >  <itemtemplate>   <b><%# DataBinder Eval(Container DataItem au_id ) %></b><br>

   <! start child repeater >   <asp:repeater id= child datasource= <%# ((DataRowView)Container DataItem) Row GetChildRows( myrelation ) %> runat= server >    <itemtemplate>      <%# DataBinder Eval(Container DataItem [\ title_id\ ] )%><br>     </itemtemplate>   </asp:repeater>   <! end child repeater >

 </itemtemplate></asp:repeater><! end parent repeater >

</form></body></>Nestedrepeater aspx cs using System;using System Data;using System Data SqlClient;using System Web;using System Web SessionState;using System Web UI;using System Web UI WebControls;

namespace yourprojectname{ public class nestedrepeater : System Web UI Page  {   protected System Web UI WebControls Repeater parent;   public nestedrepeater()   {     Page Init += new System EventHandler(Page_Init);   }   public void Page_Load(object sender EventArgs e)   {     //Create the connection and DataAdapter for the Authors table      SqlConnection cnn = new SqlConnection( server=(local);database=pubs;uid=sa;pwd=; );     SqlDataAdapter cmd = new SqlDataAdapter( select * from authors cnn);

     //Create and fill the DataSet      DataSet ds = new DataSet();     cmd Fill(ds authors );

     //Create a second DataAdapter for the Titles table      SqlDataAdapter cmd = new SqlDataAdapter( select * from titleauthor cnn);     cmd Fill(ds titles );

     //Create the relation beween the Authors and Titles tables      ds Relations Add( myrelation      ds Tables[ authors ] Columns[ au_id ]      ds Tables[ titles ] Columns[ au_id ]);

     //Bind the Authors table to the parent Repeater control and call DataBind      parent DataSource = ds Tables[ authors ];     Page DataBind();

lishixinzhi/Article/program/net/201311/15734



  • C#父级repeater中嵌套子级repeater
    答:父repeater中添加:<asp:HiddenField ID="hidNumber" runat="server" Value='<%#DataBinder.Eval(Container.DataItem,"Number") %>' /> Repeater1_ItemDataBound事件取值:HiddenField hidChildNumber = (HiddenField)e.Items.FindControl("hidChildNumber");或者 DataBinder.Eval(e.Item.DataItem, "...
  • 关于ASP.NET 中Repeater控件数据显示 与SQL查询的问题
    答:前台:<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound"> <ItemTemplate> <asp:HiddenField ID="HiddenField1" runat="server" Value='<%#Eval("大类的Id") %>' /> <%#Eval("大类的名称") %> <asp:Repeater ID="Repeater2" runat="server">...
  • .net repeater 嵌套gridview 怎么查找出gridview中放置的lab控件...
    答:GridView GD = (GridView) repeaterID.Items[0].FindControl("gridviewID");//第二步:gridview控件找到了,找到其中某一行的lab就很简单了 Label lbl = GD.Rows[0].FindControl("labelID");我这找到的是repter中的第一行中gridview的第一行第一列的lab值;不懂再问,怎么没分?
  • repeater 能不能实现比如(一共显示4行,一行 5条 那样的)
    答:OK 我这样理解你的问题 你要的效果是不是这样的:数据行一 数据条1 数据条2 数据行二 数据条1 数据条2 ...如果是向上面所列举的话, 你需要用嵌套 repeater 第一个repeater 绑定数据行 在第一个repeater 的行绑定事件里面,给第二个repeater 绑定数据源!这样就可以了! 有不懂留言!
  • 写4层的层级,用了4个repeater一个套一个,一上来加载很慢,有什么好的...
    答:你可以这样写,第一级用repeater来绑定,点击第一级展开层级的时候用jquery写,然后绑定二三四级都在jquery的方法里用js实现。这样写的好处是点哪个数据就加载那个,速度很快,缺点是js写的话,样式和层级图片的变化和控制写起来有些麻烦,就这些
  • ASP.NET如何把查询出来的数据遍历添加到数组中后,用Repeater显示
    答:这个要用到repeater的嵌套调用,数据是我模拟的,已经测试过了没问题,你可以把这段东西直接放到你的程序里试试 代码如下(注意前台页面的代码中DataSource='<%#GetRows(Eval("c1").ToString()) %>'>这里一定要用单引号)后台代码 DataTable dt = new DataTable();protected void Page_Load(object...
  • 2个repeater 如何相互操作
    答:通过DOM操作显示子菜单。这个方法应该是目前最流行的。具体AJAX的教程网上很多的。还有方法,你可以写一个方法,参数为第一层菜单的ID 输出 子菜单的HTML 在第一个repeater中调用这个方法。这个方法 我感觉是实现起来最简单的。非要嵌套也可以 你在“知道”里面搜一下 “repeater嵌套”,很多的!
  • asp.net 中repeater控件的使用
    答:<HeaderTemplate></HeaderTemplate>之间的内容只出现一次。<ItemTemplate></ItemTemplate>之间的内容循环出现 <AlternatingItemTemplate></AlternatingItemTemplate>和itemtemplate轮换出现 <SeparatorTemplate></SeparatorTemplate> 间隔的内容 结束。只出现一次 ...
  • 如何在Repeater中动态显示HeaderTemplate中的值
    答:在数据绑定事件中 protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e){ if (e.Item.ItemType == ListItemType.Header){ //动态显示 } } 嵌套绑定问题会很复杂很多的,不建议你这样做。非要做的话,自定义一个Repeater控件的扩展,用来放父Repeater绑定的值,在子...
  • repeater嵌套repeater获取主键为什么报错
    答:DataRowView rowv = (DataRowView)e.Item.DataItem;这句换成 Maticsoft.Model.GiftStyleListInfo rowmodel = (Maticsoft.Model.GiftStyleListInfo)e.Item.DataItem;下面调用的时候 原来:rowv["id"];改成rowmodel.id;正如提示,model不能直接转换成表行类。。