ASPxTreeList 递归树 嵌入丛表 树形结构演示

先看数据结构:

ASPxTreeList 递归树 嵌入丛表 树形结构演示_第1张图片

 

用递归怎么形成树,数据表1,可以看到  ParentNo 字段 0代表根节点,1是在上海下面   2市南供电公司又在

3下面 ,3对应的是江西。

按这规律做树

先用ParentNo 是查询表1的所有数据

 

ASPxTreeList 递归树 嵌入丛表 树形结构演示_第2张图片

Code:

 

using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using tanyong.Model; using tanyong.BLL; using DevExpress.Web.ASPxTreeList; namespace tanyong.Web { public partial class LeftTree : System.Web.UI.Page { string text = null; static int num = 0; protected void Page_Load(object sender, EventArgs e) { //CreateNodes(0,); bindtreelist(); } /// <summary> /// 绑定树 /// </summary> void bindtreelist() { num=0;//静态变量要清空原因是鼠标点击树会再次启动Page_load,num不是以前num DataSet ds = new tanyong.BLL.Branchs().GetList("ParentNo=0"); TreeListNode fatherlist = null;//树节点 int n1 = 0; for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { fatherlist = CreateNodeCore(num, "Inbox", ds.Tables[0].Rows[i][2].ToString(), "../SMidHistoricalDataCT.aspx", null); n1 = Convert.ToInt16(ds.Tables[0].Rows[i][0]); CreateNodes(n1, fatherlist);//递归入口 num++; } ASPxTreeList1.ExpandAll();//展开所有节点 } private void CreateNodes(int parentId, TreeListNode parentNodes) { DataSet ds = new tanyong.BLL.Branchs().GetList("ParentNo=" + parentId + "");//树型菜单表 DataSet dsDevices = new tanyong.BLL.Devices().GetList("BranchNo=" + parentId + "");//统计仪 //递归树,没加嵌入 num++; for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { //父节点 再次递归,儿子又变成老子了 TreeListNode sunList = CreateNodeCore(num, "SentItems", ds.Tables[0].Rows[i][2].ToString(), "../SMidSegmenTvolume.aspx", parentNodes);//线路信息表 CreateNodes(Convert.ToInt16(ds.Tables[0].Rows[i][0]), sunList);//递归自己调用自己 } //递归树,嵌入表,统计仪名称不能加入省节点(根节点),某个地方(子节点),只能放在子子节点(3级节点) //for (int i = 0; i < ds.Tables[0].Rows.Count; i++) //{ // //父节点 再次递归,儿子又变成老子了 // TreeListNode sunList = CreateNodeCore(ds.Tables[0].Rows[i][0], "SentItems", ds.Tables[0].Rows[i][2].ToString(), "../SMidSegmenTvolume.aspx", parentNodes);//线路信息表 // for (int j = 0; j < dsDevices.Tables[0].Rows.Count; j++) // { // a = Convert.ToInt16(dsDevices.Tables[0].Rows[j][0]);//统计仪编号 // b = Convert.ToInt16(ds.Tables[0].Rows[i][0]);//树形菜单编号 // if (b == a) // {//如果统计仪和树形菜单有相同的编号输出结果 // name = dsDevices.Tables[0].Rows[j][2].ToString(); // TreeListNode sunList1 = CreateNodeCore(num + j, "DeletedItems", name, "../SMidSegmenTvolume.aspx", sunList); // //CreateNodes(Convert.ToInt16(ds.Tables[0].Rows[i][0]), sunList1); // } // } // CreateNodes(Convert.ToInt16(ds.Tables[0].Rows[i][0]), sunList);//递归自己调用自己 //} //递归树嵌入另一张丛表,不限级别 //num++; //for (int i = 0; i < ds.Tables[0].Rows.Count; i++) //{ // //父节点 再次递归,儿子又变成老子了 // TreeListNode sunList = CreateNodeCore(num, "SentItems", ds.Tables[0].Rows[i][2].ToString(), "../SMidSegmenTvolume.aspx", parentNodes);//线路信息表 // CreateNodes(Convert.ToInt16(ds.Tables[0].Rows[i][0]), sunList);//递归自己调用自己 //} //string name = ""; //for (int j = 0; j < dsDevices.Tables[0].Rows.Count; j++) //{ // if (dsDevices.Tables[0].Rows.Count > 0) // {//统计仪有编号时 // // if (b == a) // {//如果统计仪和树形菜单有相同的编号输出结果 // name = dsDevices.Tables[0].Rows[j][2].ToString();//统计仪名称 // //TreeListNode parentNodes=ds1.Tables[0].Rows[0][2].ToString(); // CreateNodeCore(num, "DeletedItems", name, "../SMidSegmenTvolume.aspx", parentNodes); // num++; // } // } //} } TreeListNode CreateNodeCore(object key, string iconName, string text, string url, TreeListNode parentNode) { TreeListNode node = ASPxTreeList1.AppendNode(key, parentNode);//添加到TreeListNode数组里 node["IconName"] = iconName;//图片名 node["Name"] = text;//节点值 node["Url"] = url;//路径 return node; } protected string GetIconUrl(TreeListDataCellTemplateContainer container) { return string.Format("~/Images/Demo/MailIcons/{0}.png", container.GetValue("IconName"));//读取图片路径 } protected void ASPxTreeList1_CustomDataCallback(object sender, DevExpress.Web.ASPxTreeList.TreeListCustomDataCallbackEventArgs e) { string key = e.Argument.ToString(); TreeListNode node = ASPxTreeList1.FindNodeByKeyValue(key); e.Result = GetEntryText(node); } protected string GetEntryText(TreeListNode node) { if (node != null) { text = node["Url"].ToString();//获得路径 //Session["treenode"] = node["Name"].ToString();//保存节点值 return text; } return string.Empty; } } }  

 

html:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="LeftTree.aspx.cs" Inherits="tanyong.Web.LeftTree" %> <%@ Register assembly="DevExpress.Web.ASPxTreeList.v10.1, Version=10.1.5.0, Culture=neutral, PublicKeyToken=41f74a48e1b65e16" namespace="DevExpress.Web.ASPxTreeList" tagprefix="dx" %> <%@ Register assembly="DevExpress.Web.ASPxEditors.v10.1, Version=10.1.5.0, Culture=neutral, PublicKeyToken=41f74a48e1b65e16" namespace="DevExpress.Web.ASPxEditors" tagprefix="dx" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>页面导航</title> <mce:script type="text/javascript"><!-- function FocusedNodeChangedTwo(s, e) { var key = chart.GetFocusedNodeKey(); chart.PerformCustomDataCallback(key); } function CustomDataCallbackTwo(s, e) { var ssrc = e.result; if (ssrc.length == 0) return; parent.document.all('Iframe0').src = ssrc; } // --></mce:script> </head> <body> <form id="form1" runat="server"> <div> <dx:ASPxTreeList ID="ASPxTreeList1" runat="server" AutoGenerateColumns="False" ClientInstanceName="chart" OnCustomDataCallback="ASPxTreeList1_CustomDataCallback" Width="100%"> <SettingsPager> <AllButton Text="All"> </AllButton> <NextPageButton Text="Next >"> </NextPageButton> <PrevPageButton Text="< Prev"> </PrevPageButton> </SettingsPager> <Settings ShowColumnHeaders="False" /> <Columns> <dx:TreeListTextColumn FieldName="Name" VisibleIndex="0"> </dx:TreeListTextColumn> </Columns> <SettingsBehavior AllowFocusedNode="True" ExpandCollapseAction="NodeDblClick" /> <SettingsCustomizationWindow Enabled="True" /> <ClientSideEvents CustomDataCallback="CustomDataCallbackTwo" FocusedNodeChanged="FocusedNodeChangedTwo" /> <Templates> <DataCell> <table cellpadding="0" cellspacing="0"> <tr> <td> <dx:ASPxImage ID="ASPxImage1" runat="server" Height="16" ImageUrl="<%# GetIconUrl(Container) %>" IsPng="true" Width="16" /> </td> <td> </td> <td style="padding-bottom: 1px;" mce_style="padding-bottom: 1px;"> <a><%# Container.Text %></a> </td> </tr> </table> </DataCell> </Templates> </dx:ASPxTreeList> </div> </form> </body> </html>  

 

不限级别任意节点都可以显示结果

统计仪表的5条记录名称都显示了

ASPxTreeList 递归树 嵌入丛表 树形结构演示_第3张图片

 

限制级别的显示

表里有5条数据由于有1个节点在根节点,一个节点在1级节点所以哪两个节点没有显示,只能在

3级节点显示。

ASPxTreeList 递归树 嵌入丛表 树形结构演示_第4张图片

 

code:调整

num++; int a = 0,b = 0; string name = null; DataSet dsDevices = new tanyong.BLL.Devices().GetAllList(); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { //父节点 再次递归,儿子又变成老子了 TreeListNode sunList = CreateNodeCore(num, "SentItems", ds.Tables[0].Rows[i][2].ToString(), "../SMidSegmenTvolume.aspx", parentNodes);//线路信息表 for (int j = 0; j < dsDevices.Tables[0].Rows.Count; j++) { a = Convert.ToInt16(dsDevices.Tables[0].Rows[j][0]);//统计仪编号 b = Convert.ToInt16(ds.Tables[0].Rows[i][0]);//树形菜单编号 if (b == a) {//如果统计仪和树形菜单有相同的编号输出结果 name = dsDevices.Tables[0].Rows[j][2].ToString(); TreeListNode sunList1 = CreateNodeCore(num+1, "DeletedItems", name, "../SMidSegmenTvolume.aspx", sunList); //CreateNodes(Convert.ToInt16(ds.Tables[0].Rows[i][0]), sunList1); num++; } } CreateNodes(Convert.ToInt16(ds.Tables[0].Rows[i][0]), sunList);//递归自己调用自己 } 

 

上面做个说明num 这个全局变量,是解决不能插入重复key问题的.

你可能感兴趣的:(server,object,String,assembly,templates,dataset)