利用循环从数据库中通过限定条件提取数据绑定给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()));
            }
        }
TreeViewWinFormDigital River

解决方案 »

  1.   

    可以采取类似分页的方式,先取前100条放入treeview,当用户点击第二页,再读取后100条......
      

  2.   

    动态分批加载
    在BeforeExpaned事件里判断加载下级节点
      

  3.   

    你先加载第一级节点,就是parentid为0的节点,然后判断下面有无子级,有的话,给节点下面加一个Text为“”的空节点在BeforeExpaned事件里判断当前节点下是不是只有一个节点且改节点Text="" ,  如果是,则从datasource里查找当前节点的下级节点加载到当前节点下,加载下级节点时,判断该下级节点下有无子级别,有的话,给该下级节点下面加一个Text为“”的空节点
    ....,跟windows资源管理器加载目录树一个道理
      

  4.   

    百万条用treeview找个节点估计要一天,建议用textbox+Autocomplete 功能。