不是经常用,发现再次用到时又要再写一遍,这次花点时间记录一下

代码:
-------------------------------------

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相关推荐

  1. 一次性加载树结构数据表 mapper加载

    ************************************************************* @Override public List<Organization& ...

  2. 腾讯云图-一次性加载全部数据

    https://cloud.tencent.com/document/product/665/42130

  3. Qt解决UI界面一次性加载数据过多卡顿的问题

    关于Qt如何解决UI界面一次性加载太多数据而卡顿的问题 思路分析: ​ 以QTableWidget电子词典为例,每次模糊查询单词时都会产生几十种,几千甚至上万种不同的结果: ​ 例如我们输入a,对a进 ...

  4. ios网络学习------4 UIWebView的加载本地数据的三种方式

    ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...

  5. 上拉加载更多后台数据_6-7【微信小程序全栈开发课程】记录页面(七)--分页加载记录数据...

    现在是一次性加载所有的记录数据,数据多的时候,会加载比较慢,所以我们改成分页加载,一次最多加载15条数据 每次拉倒底部都会自动加载下一页的数据,知道所有的数据加载完成 1.添加data变量 编辑rec ...

  6. Android Room联合AsyncListUtil实现RecyclerView分页加载ORM数据

    Android Room联合AsyncListUtil实现RecyclerView分页加载ORM数据 我之前写了一系列关于AsyncListUtil实现RecyclerView和ListView的分页 ...

  7. Tensorflow2.* 加载和预处理数据之用 tf.data 加载 Numpy数据(2)

    Tensorflow2.* 机器学习基础知识篇: 对服装图像进行分类 使用Tensorflow Hub对未处理的电影评论数据集IMDB进行分类 Keras 机器学习基础知识之对预处理的电影评论文本分类 ...

  8. Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比

    Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比 标签: AndroidAsyncTaskThreadPool异步加载view 2 ...

  9. AE按行政区范围加载图层数据(转载)

    大家可能在平时开发中可能会遇到按行政区加载图层数据的需求,比方说整个国土资源部有某一类型专题数据有若干图层,每个图层数据的范围是整个中国,这时国土资源部开发一套系统可能有这个需求,每个省只能加载本省的 ...

最新文章

  1. 新增一个主键自增长_为什么InnoDB宜用自增主键
  2. 干货丨一文看懂什么是“自然语言处理”
  3. 两表格合并_使用 Python 合并多个格式一致的 Excel 文件
  4. (EM算法)The EM Algorithm
  5. 一鼓作气 博客--第六篇 note6
  6. 执行caffe的draw_net.py出现“GraphViz's executable dot not found”的解决方法
  7. 计算机专业的第二批本科大学,第二批本科院校
  8. 数据结构顺序表基本流程
  9. 【新冠疫情】5G到底能为抗疫做点啥,这篇文章终于讲清楚了
  10. 【Flink】Flink 1.9 版本 web UI 突然没有日志
  11. Android传感器编程入门(三)
  12. 一个小时快速搭建微信小程序教程
  13. 捷联惯导系统学习7.3(惯性/卫星组合导航 )
  14. 2017ACM暑期多校联合训练 - Team 8 1011 HDU 6143 Killer Names (容斥+排列组合,dp+整数快速幂)...
  15. ssl(https)部署指南
  16. splash安装和简单使用
  17. 从Daemons到finalize timed out after 10 seconds
  18. 前端加密解密 crypto-js
  19. Mac – m1安装RDM – Redis桌面管理 – RedisDesktopManager – Redis可视化
  20. 基于 C++ 设计的(控制台)唐诗三百首【100010789】

热门文章

  1. 已知小红今年12岁c语言编程,C语言程序设计第轮复习习题.doc
  2. pytorch 训练过程acc_【图节点分类】10分钟就学会的图节点分类教程,基于pytorch和dgl...
  3. linux内核和cpu指令集,Linux之父:Intel别浪费时间在AVX512这类指令集、多堆核心才是正道...
  4. java oracle in 10000_java支持ORACLE的in不能超过1000
  5. 妲己智能机器人开箱_王者荣耀:妲己第二款史诗限定皮肤周三上架,全局数字流特效一览...
  6. python2的input,关于python2.x input函数的安全隐患
  7. GitHub:TensorFlow、PyTorch最全资料集锦
  8. 机器学习(15)精确率召回率F1-score(查看癌症预测结果的精确率、召回率)
  9. LeetCode刷题记录8——605. Can Place Flowers(easy)
  10. 原生js循环展示dom_【前端面试】用一道题讲 js 的事件循环队列