在一个datalist里嵌套另外一个Repeater,且这个datalist 和 Repeater是提取同一个表里的数据,如何做关联?

parsely 2003-10-20 04:48:16
这样的:
----------------------------------------------------------------------
数据库中的一个表 Category 中有三个字段,结构为:
id (int 标识)
Category_id (nvarchar)
Category_name (nvarchar)
---------------------------------------------------------------------

表 Category 中的一部分数据如下:

id Category_id Category_name

1 aaaa 电脑/及各配件
2 aaaa_0001 主板
3 aaaa_0002 CPU
4 aaaa_0003 显卡
5 aaaa_0004 内存
6 bbbb 箱包/鞋帽/服饰配件
7 bbbb_0001 服装
8 bbbb_0002 内衣
9 bbbb_0003 披肩
10 cccc 通讯器材/及手机配件
11 cccc_0001 手机
12 cccc_0002 小灵通
13 cccc_0003 对讲机
14 cccc_0004 电台
. . .
. . .
. . .
以下略
------------------------------------------------------------------
我想提取出来数据后这样显示出来:



电脑/及各配件 (aaaa)

主板 CPU 显卡 内存
----------------------
箱包/鞋帽/服饰配件 (bbbb)

服装 内衣 披肩
----------------------
通讯器材/及手机配件 (cccc)

手机 小灵通 对讲机 电台
-----------------------

即Category_id 为aaaa 的下面把Category_id 为 aaaa_0001,aaaa_0002,aaaa_0003的项全显示出来,
同样Category_id 为bbbb 的下面把Category_id 为bbbb_0001,bbbb_0002,bbbb_0003的项全显示出来



...全文
76 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
webdiyer 2003-10-22
  • 打赏
  • 举报
回复
因为你的项目文件是用vs2003创建的,我的vs2002无法打开,所以只好自己写一个文件,并把你的数据倒入sql Server中,实现你的功能比上一个更简单,以下是我写的示例文件代码,你可以改一下数据库连接字符串然后运行看看,另外也从sql Server联机文档中找到了fn,在函数前加 fn 表示该函数是odbc函数,其实你可以不用这个函数,象我下面这样就行,当然如果你要用那个fn函数,下面代码也一样可以运行:

test.aspx:
----------------------------------------
<%@Import Namespace="System.Data.SqlClient"%>
<%@Import Namespace="System.Data"%>
<%@Page debug=true%>
<script runat="server" Language="C#">
SqlConnection conn;
DataTable table;
SqlDataAdapter adapter;
void Page_Load(object src,EventArgs e){
conn=new SqlConnection("server=localhost;initial catalog=aspnetforums;uid=sa;pwd=");
table=new DataTable();
adapter=new SqlDataAdapter("select id,Category_id,Category_name from Category",conn);
adapter.Fill(table);
if(!Page.IsPostBack){
DataView view=new DataView(table);
view.RowFilter="len(category_id)=4";
dlist.DataSource=view;
dlist.DataBind();
}
}

void BindRepeater(object src,DataListItemEventArgs e){
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem){
Repeater rep=(Repeater)e.Item.FindControl("repeater1");
string cid=(string)dlist.DataKeys[e.Item.ItemIndex];
DataView view=table.DefaultView;
view.RowFilter="category_id like '"+cid+"_%'";
rep.DataSource=view;
rep.DataBind();
conn.Close();
}
}
</script>
<HTML><HEAD>
<TITLE> Webdiyer 制造:) (www.webdiyer.com) </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="Webdiyer">
</HEAD><BODY>
<form runat="server">
<asp:DataList runat="server" id="dlist" RepeatColumns=1 RepeatDirection="horizontal" OnItemDataBound="BindRepeater" width=400 DataKeyField="category_id">
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"Category_name")%><br>----------------------<br>
<asp:Repeater runat="server" id="repeater1">
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"category_Name")%>,
</ItemTemplate>
</asp:Repeater>
<hr>
</ItemTemplate>
</asp:DataList>
</form>
</BODY></HTML>
parsely 2003-10-21
  • 打赏
  • 举报
回复
我是想用这种方法提取不同分类:

-----------------------------------------------------------------------------

表 Category 中的一部分数据如下:

id Category_id Category_name

1 aaaa 电脑/及各配件
2 aaaa_0001 主板
3 aaaa_0002 CPU
4 aaaa_0003 显卡
5 aaaa_0004 内存
6 bbbb 箱包/鞋帽/服饰配件
7 bbbb_0001 服装
8 bbbb_0002 内衣
9 bbbb_0003 披肩
10 cccc 通讯器材/及手机配件
11 cccc_0001 手机
12 cccc_0002 小灵通
13 cccc_0003 对讲机
14 cccc_0004 电台
. . .
. . .
. . .
以下略

---------------------------------------------------------------------------

一级分类:

//Category_id = aaaa 则长度为4,这样就把Category_id = aaaa (bbbb,cccc)的一级分类都取出来了
sql = " select * from category where ({ fn LENGTH(Category_id) } = 4) " ;



二级分类:




//Category_id = aaaa_0001,则长度为9,这样就把相关的二级分类取出来了

C1_id = 略 // 应该是一级分类传过来的一级分类的Category_id,如(aaaa)
string sql = " select * from category where ({ fn LENGTH(Category_id) } = 9 and Category_id like '"+C1_id+"_%') " ;


parsely 2003-10-21
  • 打赏
  • 举报
回复
up
zsww 2003-10-21
  • 打赏
  • 举报
回复
关注!!

-----------努力学习 不断实践 虚心讨教---------
parsely 2003-10-21
  • 打赏
  • 举报
回复
To: webdiyer(陕北吴旗娃)

关于: ({ fn LENGTH(Category_id) } 中的"fn"的含义


不清楚,我在别人的代码上看到的,就是取这个字段的长度,我在别处调试通过了。

你说的:

把你获取二级目录的sql语句中where子句后边的部分用来做DataView的RowFilter条件不可以吗?可是它们是一个表里的,字段名称都是一样的,我调试的时候总通不过。

http://www.rczx.com/ask/category.mdb 这是我把数据倒出到一个 access 数据库里了,你可以试试。
webdiyer 2003-10-21
  • 打赏
  • 举报
回复
把你获取二级目录的sql语句中where子句后边的部分用来做DataView的RowFilter条件不可以吗?你那个sql语句中的fn 是什么意思?
webdiyer 2003-10-20
  • 打赏
  • 举报
回复
你的表设计得有问题,你怎么能取出所有的一级目录,然后再取出相应的二级或三级目录呢?你可以参照northwind数据库中的employees表,给你的表再加一个字段 parentCategory,某个目录如果有父目录,这个字段就是它的父目录的category,如果没有父目录,也就是这个目录是一级目录,那么这个字段就是空的。
parsely 2003-10-20
  • 打赏
  • 举报
回复
why not
tiger8000 2003-10-20
  • 打赏
  • 举报
回复
我也有这个疑问!
parsely 2003-10-20
  • 打赏
  • 举报
回复
where is my savior?
parsely 2003-10-20
  • 打赏
  • 举报
回复
nobody can help me
parsely 2003-10-20
  • 打赏
  • 举报
回复
这是以前 webdiyer(陕北吴旗娃) 的一个答复:不过是两个表做的关联

用northwind数据库中的customers和orders表做一个示例,你看看吧,不是很好:

以下代码保存为test.aspx,修改一下其中的数据库连接字符串后运行:
-------------------------------------------------------------

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

<script runat="server" Language="C#">
SqlConnection conn;
SqlDataAdapter adapter;
DataTable table;
void Page_Load(object src,EventArgs e){
conn=new SqlConnection("server=localhost;initial catalog=northwind;uid=sa;pwd=");
table=new DataTable();
adapter=new SqlDataAdapter("select orderid,customerid from orders",conn);
adapter.Fill(table);
if(!Page.IsPostBack){
adapter=new SqlDataAdapter("select customerid from customers",conn);
DataTable table1=new DataTable();
adapter.Fill(table1);
dlist.DataSource=table1;
dlist.DataBind();
}
}

void BindRepeater(object src,DataListItemEventArgs e){
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem){
Repeater rep=(Repeater)e.Item.FindControl("repeater1");
string cid=(string)dlist.DataKeys[e.Item.ItemIndex];
DataView view=table.DefaultView;
view.RowFilter="customerid='"+cid+"'";
rep.DataSource=view;
rep.DataBind();
conn.Close();
}
}
</script>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="Webdiyer">
</HEAD>

<BODY>
<asp:DataList runat="server" id="dlist" RepeatColumns=1 RepeatDirection="horizontal" OnItemDataBound="BindRepeater" width=400 DataKeyField="customerid">
<ItemTemplate>
顾客编号:<%#DataBinder.Eval(Container.DataItem,"customerid")%><br/>----------------------<br/>
订单号:<asp:Repeater runat="server" id="repeater1">
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"orderid")%>,
</ItemTemplate>
</asp:Repeater>
<hr>
</ItemTemplate>
</asp:DataList>
</BODY>
</HTML>


运行后的效果(一小部分):
-------------------------

顾客编号:ALFKI
----------------------
订单号: 10643, 10692, 10702, 10835, 10952, 11011,
--------------------------------------------------------------------------------

顾客编号:ANATR
----------------------
订单号: 10308, 10625, 10759, 10926,
--------------------------------------------------------------------------------

顾客编号:ANTON
----------------------
订单号: 10365, 10507, 10535, 10573, 10677, 10682, 10856,
--------------------------------------------------------------------------------

顾客编号:AROUT
----------------------
订单号: 10355, 10383, 10453, 10558, 10707, 10741, 10743, 10768, 10793, 10864, 10920, 10953, 11016,
--------------------------------------------------------------------------------

顾客编号:BERGS
----------------------
订单号: 10278, 10280, 10384, 10444, 10445, 10524, 10572, 10626, 10654, 10672, 10689, 10733, 10778, 10837, 10857, 10866, 10875, 10924,
--------------------------------------------------------------------------------

顾客编号:BLAUS
----------------------
订单号: 10501, 10509, 10582, 10614, 10853, 10956, 11058,

可我现在的问题是在一个表内,且两者有很大的区别

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧