ASP.NET DataList嵌套實現評論效果

來源:互聯網
上載者:User

問題:

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查詢資料庫方式替換。

效果圖:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.