ASP.NET DataList嵌套实现评论效果
程序员文章站
2022-03-23 19:36:20
问题:
datalist1显示say这个表的数据
然后想在datalist1中嵌套一个datalist2用于显示对应的评论
表2的 sayid对应表1的id,若表2中找不到对应sayid则在对应...
问题:
datalist1显示say这个表的数据
然后想在datalist1中嵌套一个datalist2用于显示对应的评论
表2的 sayid对应表1的id,若表2中找不到对应sayid则在对应的datalist1中不显示datalist2.
难点在于如何达到“林夏”的说说下面只显示“黄磊”、“叶伟信”的评论,“韩寒”的下面只显示“程程”的评论。(林夏的id是3,所以查询对应的表2中sayid为3的行)。
代码
前台代码:
<html xmlns="https://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title></title> <link href="content/bootstrap.css" rel="stylesheet" /> </head> <body> <form id="form1" runat="server"> <h2 >评论列表</h2> <p align="center" > <asp:datalist id="datalist1" runat="server" onitemdatabound="datalist1_itemdatabound" width="50%" cssclass="table table-bordered" cellpadding="0" cellspacing="0"> <itemtemplate> <p> 来自<%# eval("place") %>的<%# eval("username") %>于<%# eval("date") %>发表 </p> <p> <%# eval("text") %> </p> <asp:datalist id="datalist2" runat="server" width="100%"> <itemtemplate> <p > <p> <%#eval("username") %>的评论<%#eval("date") %> </p> <p>评论内容:<%#eval("text") %> </p> </p> </itemtemplate> </asp:datalist> </itemtemplate> </asp:datalist> </p> </form> </body> </html>
后台cs:
protected void page_load(object sender, eventargs e) { if (!page.ispostback) { this.datalist1.datasource = data(); this.datalist1.databind(); } } public dataset data() { dataset ds = new dataset(); datatable dtparent = new datatable(); dtparent.columns.add("id", typeof(int)); dtparent.columns.add("username", typeof(string)); dtparent.columns.add("text", typeof(string)); dtparent.columns.add("date", typeof(string)); dtparent.columns.add("place", typeof(string)); dtparent.rows.add(1, "摩根", "这个...", "2014.6", "伦敦"); dtparent.rows.add(2, "韩寒", "潮流...", "2015.7", "湖南"); dtparent.rows.add(3, "林夏", "岁月...", "2016.2", "小城"); dtparent.rows.add(4, "王菲", "我会...", "2015.9", "香港"); dtparent.rows.add(5, "郭敬明", "我们...", "2015.1", "上海"); datatable dtchild = new datatable(); dtchild.columns.add("id", typeof(int)); dtchild.columns.add("sayid", typeof(int)); dtchild.columns.add("username", typeof(string)); dtchild.columns.add("text", typeof(string)); dtchild.columns.add("date", typeof(string)); dtchild.rows.add(1, 3, "黄磊", "我是第一个评说", "2016.6.17 13:06:12"); dtchild.rows.add(3, 3, "叶伟信", "评论林夏的说", "2016.6.17 12:26:43"); dtchild.rows.add(4, 2, "程程", "我评论韩寒", "2015.3.1 15:20:10"); ds.tables.addrange(new datatable[] { dtparent, dtchild }); datarelation dr = new datarelation("relation", dtparent.columns["id"], dtchild.columns["sayid"]); ds.relations.add(dr); dtparent = ds.relations["relation"].parenttable; dtchild = ds.relations["relation"].childtable; return ds; } protected void datalist1_itemdatabound(object sender, datalistitemeventargs e) { if (e.item.itemtype == listitemtype.item || e.item.itemtype == listitemtype.alternatingitem) { datalist datalist = e.item.findcontrol("datalist2") as datalist; datarowview rowv = (datarowview)e.item.dataitem; datarow[] rows = data().tables[1].select("sayid='" + rowv["id"].tostring() + "'"); datatable dt = data().tables[1].clone(); foreach (datarow dr in rows) { dt.importrow(dr); } datalist.datasource = dt; datalist.databind(); } }
后台代码中数据源部分可以用ado.net查询方式替换。
效果图:
上一篇: 分享一个C布局(代码)
推荐阅读
-
ASP.NET实现级联下拉框效果实例讲解
-
asp.net DropDownList实现二级联动效果
-
ASP.NET MVC 3仿Server.Transfer效果的实现方法
-
在ASP.NET 2.0中操作数据之三十五:使用Repeater和DataList单页面实现主/从报表
-
ASP.NET存储过程实现分页效果(三层架构)
-
asp.net实现DataList与Repeater嵌套绑定的方法
-
ASP.NET存储过程实现分页效果(三层架构)
-
在ASP.NET 2.0中操作数据之三十五:使用Repeater和DataList单页面实现主/从报表
-
Android单个RecyclerView实现列表嵌套的效果
-
ASP.NET百度Ueditor编辑器实现上传图片添加水印效果