| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1650 人关注过本帖
标题:[求助]使用DataList显示嵌套数据
只看楼主 加入收藏
cjrboy
Rank: 1
等 级:新手上路
帖 子:141
专家分:0
注 册:2004-11-30
收藏
 问题点数:0 回复次数:6 
[求助]使用DataList显示嵌套数据
怎么控制子数据显示的行数(也就是怎么控制DataList显示的行数)
这里把所有的数据都显示出来了,如何控制每一分类显示数据行数为15呢
下面是源码:
 本文描述如何使用嵌套的Repeater 控件来显示分级数据 。当然了,你也可以将这一技术应用到其他的列表绑定控件上去,比如DataGrid包含DataGrid,DataList包含DataList等等的组合。

  绑定到父表

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

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

  5.打开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 cmd1 = new SqlDataAdapter("select * from authors",cnn);
  DataSet ds = new DataSet();
  cmd1.Fill(ds,"authors");

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

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

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

172-32-1176
213-46-8915
238-95-7766
267-41-2394
...

  绑定到子表

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

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

  2.设置子Repeater 控件的DataSource 属性:

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

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

  <%@ Import Namespace="System.Data" %>

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

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

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

172-32-1176
PS3333
213-46-8915
BU1032
BU2075
238-95-7766
PC1035
267-41-2394
BU1111
TC7777
...

完整的代码

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

<html>
<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>
</html>
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 cmd1 = new SqlDataAdapter("select * from authors",cnn);

     //Create and fill the DataSet.
     DataSet ds = new DataSet();
     cmd1.Fill(ds,"authors");

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

     //Create the relation bewtween 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();

     //Close the connection.
     cnn.Close();
   }
   private void Page_Init(object sender, EventArgs e)
   {
     InitializeComponent();
   }
   private void InitializeComponent()
   {
    this.Load += new System.EventHandler(this.Page_Load);
   }
  }
}

[此贴子已经被作者于2006-4-9 13:37:32编辑过]

搜索更多相关主题的帖子: 嵌套 DataList 数据 Repeater 控件 
2006-04-09 13:28
guobinxian
Rank: 1
等 级:新手上路
威 望:2
帖 子:195
专家分:0
注 册:2006-3-28
收藏
得分:0 

用TABLE 递归 TR TD 付值.
一样的效果.


?蔾錵輐落溶溶钥,柳絮筂鎕淡淡風?。
2006-04-10 14:38
cjrboy
Rank: 1
等 级:新手上路
帖 子:141
专家分:0
注 册:2004-11-30
收藏
得分:0 
大虾可以说明白点吗
有没有实例
谢谢

http://www. QQ:75913145 三青互动
2006-04-10 15:24
guobinxian
Rank: 1
等 级:新手上路
威 望:2
帖 子:195
专家分:0
注 册:2006-3-28
收藏
得分:0 
你是需要显示出像树型结构一样的特点?
查找父类,找到父类下的子类?

?蔾錵輐落溶溶钥,柳絮筂鎕淡淡風?。
2006-04-10 18:02
cjrboy
Rank: 1
等 级:新手上路
帖 子:141
专家分:0
注 册:2004-11-30
收藏
得分:0 
是的
父类与子类绑定已经做到
另一个问题就是怎么限制子类显示数据的条数

http://www. QQ:75913145 三青互动
2006-04-10 22:47
cjrboy
Rank: 1
等 级:新手上路
帖 子:141
专家分:0
注 册:2004-11-30
收藏
得分:0 

发了这么多帖都没人回答
版主呢


http://www. QQ:75913145 三青互动
2006-04-11 07:55
guobinxian
Rank: 1
等 级:新手上路
威 望:2
帖 子:195
专家分:0
注 册:2006-3-28
收藏
得分:0 
// 绑定根节点
public void bindGroup(DropDownList ddl)
{
ddl.Items.Clear();
DataTable dt = new DataTable();
dt=sa.ExecSelect("Select * from TypeInfo","ClassType").Tables["ClassType"];
ddl.Items.Add(new ListItem("添加根节点","0"));
if(dt.Rows.Count>0)
{
foreach(DataRow row in dt.Rows)
{
if(row["TypeFId"].ToString().Trim()=="0")//绑定根节点
{
ddl.Items.Add(new ListItem(row["TypeName"].ToString(),row["TypeId"].ToString()));
bindDropChildItem(ddl,dt,row["TypeId"].ToString(),1);
}
}
}
}
// 绑定子节点
private void bindDropChildItem(DropDownList d,DataTable dt,string id,int length)
{
DataRow[] rows=dt.Select("TypeFId='"+id+"'","TypeId ASC");//取出id子节点进行绑定
for(int i=0;i<rows.Length;i++)
{
d.Items.Add(new ListItem(this.SpaceLength(length)+rows[i]["TypeName"].ToString(),rows[i]["TypeId"].ToString()));
bindDropChildItem(d,dt,rows[i]["TypeId"].ToString(),length+1);//空白数目加1
}
}
// 子节点前面的空白数
private string SpaceLength(int i)
{
string space="";
string temp="├";
for(int j=0;j<i;j++)
{
space+=" ";
}
space=space+temp;
return space;
}


这是绑定一个下拉框。跟树型差不多。
要删除某一个节点,我是用了触发器,递归删除

?蔾錵輐落溶溶钥,柳絮筂鎕淡淡風?。
2006-04-11 09:03
快速回复:[求助]使用DataList显示嵌套数据
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020297 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved