欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-23 19:36:20
问题: datalist1显示say这个表的数据 然后想在datalist1中嵌套一个datalist2用于显示对应的评论 表2的 sayid对应表1的id,若表2中找不到对应sayid则在对应...

问题:

datalist1显示say这个表的数据
ASP.NET DataList嵌套实现评论效果
然后想在datalist1中嵌套一个datalist2用于显示对应的评论
ASP.NET DataList嵌套实现评论效果
表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查询方式替换。

效果图:

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