非递归一次性加载分类数据到TreeViw
?
??不是經常用,發現再次用到時又要再寫一遍,這次花點時間記錄一下
? 代碼:
-------------------------------------
?private void InitView()
??? {
??????? DataView dv = CommodityClassBLL.Query().Tables[0].DefaultView;
??
??????????? if (dv.Count >= 1)
??????????? {
??????????????? dv.Sort = "Code";
??????????????? string curCode = "";
??????????????? string prvCode = dv[0]["code"].ToString();
??????????????? trvClass.Nodes.Clear();
??????????????? trvClass.Nodes.Add(new TreeNode("行業分類", "0"));
??????????????? trvClass.Nodes[0].SelectAction = TreeNodeSelectAction.None;
???????????????
??????????????? TreeNode root = new TreeNode(dv[0]["ClassName"].ToString(), dv[0]["ClassID"].ToString());
??????????????? trvClass.Nodes[0].ChildNodes.Add(root);
??????????????? root.NavigateUrl = string.Format(JsText, dv[0]["ClassName"].ToString(), dv[0]["ClassID"].ToString(), root.ValuePath);
??????????????? TreeNode prvNode = trvClass.Nodes[0].ChildNodes[0];//定位prvNode為第一個實際數據節點
??????????????? //prvNode用來尋找當前節點的父節點
??????????????? for (int i = 1; i < dv.Count; i++)
??????????????? {
??????????????????? curCode = dv[i]["Code"].ToString();
??????????????????? int classID = (int)dv[i]["ClassID"];
??????????????????? string className = dv[i]["ClassName"].ToString();
??????????????????? int len = curCode.Length - prvCode.Length;
??????????????????? if (len > 4)//表示當前節點是prvNode節點子節點的子節點
??????????????????? {
?????????????????????? //那么prvNode.ChildNodes[prvNode.ChildNodes.Count-1]
?????????????????????? //即是當前接點的父節點
??????????????????????? prvNode = prvNode.ChildNodes[prvNode.ChildNodes.Count - 1];
??????????????????????? prvCode = curCode.Substring(0, curCode.Length - 4);
??????????????????? }
??????????????????? else if (len < 4)//表示當前節點的父節點是prvNode向上的某個父節點
??????????????????? {
??????????????????????? int level = Math.Abs(len / 4) + 1;
??????????????????????? for (int j = 1; j <= level; j++)
??????????????????????? {
??????????????????????????? prvNode = prvNode.Parent;//回溯
??????????????????????? }
??????????????????????? prvCode = curCode.Substring(0, curCode.Length - 4);
??????????????????? }
??????????????????? //(len==4)表示當前節點是前一節點的的直接子節點(參考下面的截圖)
??????????????????? TreeNode node = new TreeNode(className, classID.ToString());
??????????????????? prvNode.ChildNodes.Add(node);
???????????????????
??????????????????? node.NavigateUrl = string.Format(JsText, className, classID, node.ValuePath);
?????????????????? //標記選中的接點,并展開其父節點
??????????????????? if (classID == SelectedClassID)
??????????????????? {
??????????????????????? node.Selected = true;
??????????????????????? while (node.Parent != null)
??????????????????????? {
??????????????????????????? node.Parent.Expand();
??????????????????????????? node = node.Parent;
??????????????????????? }
?
??????????????????? }
??????????????? }
??????????????? if (trvClass.Nodes[0].ChildNodes != null)
??????????????????? trvClass.Nodes[0].Expand();
??????????? }
???
??? }
?-------------------------------
說明:
? dv里面的數據結構如
?
?
?
轉載于:https://www.cnblogs.com/wdfrog/archive/2008/09/26/1299549.html
總結
以上是生活随笔為你收集整理的非递归一次性加载分类数据到TreeViw的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从空间数据库中删除所有拓扑对象
- 下一篇: 淘宝第一次遇到这种事我也是醉了,求问怎么