asp.net类别多级树结构显示
效果:
前台
<asp:Repeater ID="NewsLists" runat="server" onitemcommand="NewsList_ItemCommand" onitemdatabound="NewsLists_ItemDataBound"><ItemTemplate> <tr> <td height="28" align="center"><%#Eval("CategoryId")%></td> <td align="left"> <asp:Literal ID="LitFirst" runat="server"></asp:Literal> <asp:Label ID="LabClassNm" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"CategoryName") %>'></asp:Label> </td> <td align="left"><asp:TextBox ID="TextBox1" runat="server" Text='<%#Eval("OrderNum")%>'></asp:TextBox></td> <td align="center"> <asp:LinkButton ID="LinkButton2" runat="server" CommandName="OrderNumEdit" CommandArgument='<%#Eval("CategoryId") %>' >[排序]</asp:LinkButton> <asp:LinkButton ID="LinkButton3" runat="server" CommandName="UpdateCmd" CommandArgument='<%#Eval("CategoryId") %>'>[修改]</asp:LinkButton> <asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="return confirm('真的要删除选择项?');" CommandName="DeleteCmd" CommandArgument='<%#Eval("CategoryId") %>'>[删除]</asp:LinkButton> </td> </tr> </ItemTemplate></asp:Repeater>
后台数据绑定:
手动构建一个datatable
DataTable dt = new DataTable(); /// <summary> /// 初始dt /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Page_Init(object sender, System.EventArgs e) { DataColumn dc1 = new DataColumn("CategoryId"); DataColumn dc2 = new DataColumn("CategoryName"); DataColumn dc3 = new DataColumn("ParentId"); DataColumn dc4 = new DataColumn("OrderNum"); DataColumn dc5 = new DataColumn("IsDelete"); DataColumn dc6 = new DataColumn("SeoTitle"); DataColumn dc7 = new DataColumn("SeoDes"); DataColumn dc8 = new DataColumn("SeoKeys"); DataColumn dc9 = new DataColumn("TemplateId"); dt.Columns.Add(dc1); dt.Columns.Add(dc2); dt.Columns.Add(dc3); dt.Columns.Add(dc4); dt.Columns.Add(dc5); dt.Columns.Add(dc6); dt.Columns.Add(dc7); dt.Columns.Add(dc8); dt.Columns.Add(dc9); }
按照级别添加数据
private void BindTree(int ChildNodes) { //绑定根节点 this.ImageButton2.Visible = true; this.ImageButton3.Visible = false; DataTable dt1 = this.GetParentdt(ChildNodes); foreach (DataRow dr in dt1.Rows) { DataRow dar = dt.NewRow(); dar[0] = dr[0]; dar[1] = dr[1]; dar[2] = dr[2]; dar[3] = dr[3]; dar[4] = dr[4]; dar[5] = dr[5]; dar[6] = dr[6]; dar[7] = dr[7]; dar[8] = dr[8]; dt.Rows.Add(dar); BindTree(int.Parse(dr["CategoryId"].ToString())); } }
取栏目ID下数据
private DataTable GetParentdt(int CategoryId) { DataTable dt1 = new DataTable(); dt1 = XwSqlHtmlGenV.WelkinDataClass.WelkinDataTable("XW_NewsCategory", "", "CategoryId desc", string.Format("IsDelete=0 and ParentId={0}", CategoryId)); return dt1; }
不同级别根据TemplateId层来区别,显示不同样式
protected void NewsLists_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) { Literal LitFirst = (Literal)e.Item.FindControl("LitFirst"); Label LabClassNm = (Label)e.Item.FindControl("LabClassNm"); LinkButton linkbutton = (LinkButton)e.Item.FindControl("BtnEdit"); string LitStyle = "<span style=width:{0}px;text-align:right;display:inline-block;>{1}{2}</span>"; string LitImg1 = "<img src='../XwCss/images/openfolder.gif' align=absmiddle />"; string LitImg2 = "<img src='../XwCss/images/file.gif' align=absmiddle />"; string LitImg3 = "<img src='../XwCss/images/t.gif' align=absmiddle />"; DataRowView drv = (DataRowView)e.Item.DataItem; int ClassTj = Convert.ToInt32(drv["TemplateId"]); if (ClassTj == 1) { LabClassNm.Font.Bold = true; LitFirst.Text = LitImg1; } else { LitFirst.Text = string.Format(LitStyle, ClassTj * 20, LitImg3, LitImg2); } } }