当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET DataList嵌套实现评论效果

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

2018年09月29日  | 移动技术网IT编程  | 我要评论

湖口热线论坛,拜尔海姆,利仁豆浆机

问题:

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查询方式替换。

效果图:

这里写图片描述

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网