非递归一次性加载分类数据到TreeViw
?
??不是經(jīng)常用,發(fā)現(xiàn)再次用到時又要再寫一遍,這次花點(diǎn)時間記錄一下
? 代碼:
-------------------------------------
?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("行業(yè)分類", "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為第一個實(shí)際數(shù)據(jù)節(jié)點(diǎn)
??????????????? //prvNode用來尋找當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)
??????????????? 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)//表示當(dāng)前節(jié)點(diǎn)是prvNode節(jié)點(diǎn)子節(jié)點(diǎn)的子節(jié)點(diǎn)
??????????????????? {
?????????????????????? //那么prvNode.ChildNodes[prvNode.ChildNodes.Count-1]
?????????????????????? //即是當(dāng)前接點(diǎn)的父節(jié)點(diǎn)
??????????????????????? prvNode = prvNode.ChildNodes[prvNode.ChildNodes.Count - 1];
??????????????????????? prvCode = curCode.Substring(0, curCode.Length - 4);
??????????????????? }
??????????????????? else if (len < 4)//表示當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)是prvNode向上的某個父節(jié)點(diǎn)
??????????????????? {
??????????????????????? 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)表示當(dāng)前節(jié)點(diǎn)是前一節(jié)點(diǎn)的的直接子節(jié)點(diǎn)(參考下面的截圖)
??????????????????? TreeNode node = new TreeNode(className, classID.ToString());
??????????????????? prvNode.ChildNodes.Add(node);
???????????????????
??????????????????? node.NavigateUrl = string.Format(JsText, className, classID, node.ValuePath);
?????????????????? //標(biāo)記選中的接點(diǎn),并展開其父節(jié)點(diǎn)
??????????????????? 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里面的數(shù)據(jù)結(jié)構(gòu)如
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/wdfrog/archive/2008/09/26/1299549.html
總結(jié)
以上是生活随笔為你收集整理的非递归一次性加载分类数据到TreeViw的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从空间数据库中删除所有拓扑对象
- 下一篇: C#中使用GUID