日期:2014-05-17  浏览次数:21104 次

Winform中TreeView绑定过多数据时,造成程序崩溃,该怎么解决?
利用循环从数据库中通过限定条件提取数据绑定给treeview,但是当需要绑定的数据过多时,会造成程序的崩溃,这该怎么解决?

private void CreateTreeView(TreeNodeCollection nodes, DataTable dataSource, int parentid)
        {
            //构建查询条件
            string fileter;
            fileter = string.Format(BC_BAS_SKU_Type.ColumnsName.parentID + "={0}", parentid);
            //获取与筛选条件匹配的所有Datarow对象
            DataRow[] drarr = dataSource.Select(fileter);
            TreeNode node;
            //循环构建树节点
            foreach (DataRow dr in drarr)
            {
                node = new TreeNode();
                node.Text = Convert.ToString(dr[BC_BAS_SKU_Type.ColumnsName.name]);
                node.Tag = Convert.ToString(dr[BC_BAS_SKU_Type.ColumnsName.iD]);
                nodes.Add(node);
                //递归实现子节点的构建
                CreateTreeView(node.Nodes, dataSource, Int32.Parse(node.Tag.ToString()));
            }
        }
TreeView WinForm Digital?River

------解决方案--------------------
引用:
引用:动态分批加载
在BeforeExpaned事件里判断加载下级节点
如果父级过多呢?父级有百万条呢?


调侃下,你觉得作为一个正常人来讲,100W 条他能点么?

开玩笑啊!~
------解决方案--------------------
你先加载第一级节点,就是parentid为0的节点,然后判断下面有无子级,有的话,给节点下面加一个Text为“”的空节点

在BeforeExpaned事件里判断当前节点下是不是只有一个节点且改节点Text=""?,??如果是,则从datasource里查找当前节点的下级节点加载到当前节点下,加载下级节点时,判断该下级节点下有无子级别,有的话,给该下级节点下面加一个Text为“”的空节点
....,

跟windows资源管理器加载目录树一个道理