开发者社区> 极简吧> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

ASP.NET DataList嵌套实现评论效果

简介: 问题: Datalist1显示say这个表的数据 然后想在Datalist1中嵌套一个Datalist2用于显示对应的评论 表2的 sayID对应表1的id,若表2中找不到对应sayId则在对应的Datalist1中不显示Datalist2. 难点在于如何达到“林夏”的说说下面只显示“黄磊”、“叶伟信”的评论,“韩寒”的下面只显示“程程”的评论。
+关注继续查看

问题:

Datalist1显示say这个表的数据
这里写图片描述
然后想在Datalist1中嵌套一个Datalist2用于显示对应的评论
这里写图片描述
表2的 sayID对应表1的id,若表2中找不到对应sayId则在对应的Datalist1中不显示Datalist2.
难点在于如何达到“林夏”的说说下面只显示“黄磊”、“叶伟信”的评论,“韩寒”的下面只显示“程程”的评论。(林夏的id是3,所以查询对应的表2中sayId为3的行)。

代码

前台代码:

<html xmlns="http://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 style="text-align:center;">评论列表</h2>
        <div align="center" style="margin-top:20px;">
            <asp:DataList ID="DataList1" runat="server" OnItemDataBound="DataList1_ItemDataBound" Width="50%" CssClass="table table-bordered"
                CellPadding="0" CellSpacing="0">
                <ItemTemplate>
                    <div>
                        来自<%# Eval("place") %><%# Eval("username") %><%# Eval("date") %>发表
                    </div>
                    <div>
                        <%# Eval("text") %>
                    </div>
                    <asp:DataList ID="DataList2" runat="server" Width="100%">
                        <ItemTemplate>
                            <div style="border: 1px dashed black; margin: 1px;">
                                <div>
                                    <%#Eval("username") %>的评论<%#Eval("date") %>
                                </div>
                                <div>评论内容:<%#Eval("text") %> </div>
                            </div>
                        </ItemTemplate>
                    </asp:DataList>
                </ItemTemplate>
            </asp:DataList>
        </div>
    </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查询数据库方式替换。

效果图:

这里写图片描述

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
asp.net学习之DataList控件
原文:asp.net学习之DataList控件      DataList控件与Repeater控件一样由模板驱动,与Repeater控件不同的是: DataList控件默认输出是一个HTML表格.DataList在输出时已经在相应的模板上套上了表格标签,而Repeater则是模板是什么样,输出就是什么样.
1092 0
ASP.NET MVC RC 2 发布
今天发布了ASP.NET MVC RC2,希望不要像上一个版本一样有BUG之后重新再发布 下载: http://www.asp.net/mvc/ 源码: http://aspnet.codeplex.
634 0
一起谈.NET技术,asp.net控件开发基础(10)
  集合属性相信大家都很熟悉也很常用,如DropDownList,ListBox等控件             测试1            测试2            测试3           1.实现集合属性效果   经过前面几篇的学习,相信这一篇看起来已经相对简单了.我们要做的就是,先定义一个复杂属性,然后用迭代语句获取数组数据即可。
733 0
+关注
极简吧
软件架构师、微软MVP
128
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载