您目前尚未登陆,请选择【登陆】或【注册
首页->行政办公->多功能在线考试系统改进版源码>>App-Code/CommonComponent/Tree.cs>>源码在线查看
温馨提示:代码在线浏览功能只能做为源码浏览参考,如果想更进一步了解该代码请下载:多功能在线考试系统改进版源码
当前文件:文件类型 OnLineExamUpdate/App_Code/CommonComponent/Tree.cs打开代码结构图
普通视图
		            
1using System; 2using System.Data; 3using OnLineExam.DataAccessLayer; 4 5namespace OnLineExam.CommonComponent 6{ 7 /// <summary> 8 /// 一个通用的树状菜单类 9 /// </summary> 10 public class Tree 11 { 12 private string _treeHtml; 13 private DataTable _dataTable; 14 15 /// <summary> 16 /// 根据DataTable对象,生成一棵树 17 /// </summary> 18 /// <param name="dataTable">树中节点的数据</param> 19 /// <returns>树的HTML代码</returns> 20 public string CreateTree(DataTable dataTable) 21 { 22 this._dataTable = dataTable; 23 this.CreateSubTree(0); 24 return _treeHtml; 25 } 26 27 /// <summary> 28 /// 获取父节点编号为parentId的所有节点,并用DataTable返回 29 /// </summary> 30 /// <param name="parentId">父节点编号</param> 31 /// <returns>DataTable形式的所有孩子节点数据</returns> 32 private DataTable GetChilds(int parentId) 33 { 34 DataTable childNodes = new DataTable(); 35 childNodes = this._dataTable.Clone(); 36 37 foreach (DataRow dr in this._dataTable.Rows) 38 { 39 if (Convert.ToInt32(dr["ParentId"]) == parentId) 40 { 41 childNodes.ImportRow(dr); 42 } 43 } 44 45 return childNodes; 46 } 47 48 /// <summary> 49 /// 判断编号为nodeId的节点是否为叶子节点 50 /// </summary> 51 /// <param name="nodeId">待判断的节点编号</param> 52 /// <returns>是叶子节点:返回true;否则:返回false</returns> 53 private bool IsLeaf(int nodeId) 54 { 55 foreach (DataRow dr in this._dataTable.Rows) 56 if (Convert.ToInt32(dr["ParentId"]) == nodeId) 57 return false; 58 return true; 59 } 60 61 /// <summary> 62 /// 得到编号为nodeId的节点的父节点编号 63 /// </summary> 64 /// <param name="nodeId">节点编号</param> 65 /// <returns>父节点编号</returns> 66 private int GetParent(int nodeId) 67 { 68 foreach (DataRow dr in this._dataTable.Rows) 69 if (Convert.ToInt32(dr["NodeId"]) == nodeId) 70 return Convert.ToInt32(dr["ParentId"]); 71 return -1; 72 73 } 74 75 /// <summary> 76 /// 得到编号为nodeId的节点的级别,根节点为0 77 /// </summary> 78 /// <param name="nodeId">待计算的巨额电编号</param> 79 /// <returns>节点的级别,根节点为0</returns> 80 private int GetLevel(int nodeId) 81 { 82 int parentId = GetParent(nodeId); 83 if (parentId == 0) return 1; 84 else 85 return GetLevel(parentId) + 1; //递归 86 } 87 88 /// <summary> 89 /// 递归生成根编号为nodeId的树 90 /// </summary> 91 /// <param name="nodeId">所要生成子树的根节点</param> 92 private void CreateSubTree(int nodeId) 93 { 94 DataTable childNodes = this.GetChilds(nodeId); //获取根节点的所有孩子 95 96 //循环生成根节点的所有孩子对应的HTML 97 int childId = 0; 98 foreach (DataRow dr in childNodes.Rows) 99 { 100 childId = Convert.ToInt32(dr["nodeId"]); 101 this._treeHtml += "<div id=div_" + childId.ToString() + ">"; 102 103 //根据该孩子的级别,生成一些空格,以体现层次结构 104 for (int i = 0; i < GetLevel(childId); i++) 105 this._treeHtml += "&nbsp;&nbsp;&nbsp;&nbsp;"; 106 107 //如果该孩子是叶子节点,则生成其HTML代码 108 if (this.IsLeaf(childId)) 109 { 110 this._treeHtml += "<img src='..\\Images\\folder.gif'/><a href=" + dr["Url"] + ">" + dr["Text"] + "</a></div>"; 111 } 112 //如果该孩子为中间节点,则首先构造其HTML,然后递归生成其所有孩子的HTML 113 else 114 { 115 this._treeHtml += "<img src='..\\Images\\folderopen.gif'/><a href=" + dr["Url"] + ">" + dr["Text"] + "</a></div>"; 116 this.CreateSubTree(childId);//递归 117 } 118 } 119 } 120 } 121}
还没有找到您心仪的内容?请用.net源码大搜捕
代码片断 打包下载该项目完整源码:多功能在线考试系统改进版源码
51Aspx.com 版权所有 CopyRight © 2000-2008. 京ICP备06046876号