请各位高手帮帮忙:怎样实现TreeView 的分级加载?(就象CSDN的树一样)数据库数据太多了,层数也多,一次全加完太慢了.请各位帮个忙!!多谢

解决方案 »

  1.   

    用递归算法。
    下面是代码
      public void InitRootTree(TreeNodeCollection TNC)
            {
                try
                {
                    string strnode = "select BMBM,SJBMBM,BMMC from MAIN_QYZZJG";
                    Base.oledbda = new OleDbDataAdapter(strnode, Base.oledbcon);
                    Base.oledbda.Fill(Base.ds, "node");                DataView dataView = new DataView();//实例化个视图 
                    //ds是DataSet,已经从数据库里读取所有的数据了 
                    dataView = Base.ds.Tables["node"].Copy().DefaultView;//将ds填充到视图里 
                    //string aa = dataView[0].Row[0][0];
                    //ParentID是上级节点,由于第一个节点是没有上级节点的,所以我在数据库里把他的上级节点设置为0 
                    dataView.RowFilter = "SJBMBM = '0'";//读取数据库里ParentID为0的行 
                    foreach (DataRowView drv in dataView)
                    {
                        TreeNode tn = TNC.Add(drv["BMBM"].ToString(), drv["BMMC"].ToString(), 0);//添加节点 
                        tn.Tag = drv["BMBM"].ToString();
                        //添加子节点 
                        InitChildNodeTree(tn.Nodes, tn.Tag.ToString());
                    }
                    Base.ds.Tables[0].Reset();
                }
                catch (Exception Err)
                {
                    APPH.ErrModule.ShowErrBox("数据加载失败", Err);
                }
            }
            public void InitChildNodeTree(TreeNodeCollection TNC, string ParentId)
            {
                try
                {
                    DataView dataView = new DataView();
                    dataView = Base.ds.Tables["node"].Copy().DefaultView;
                    dataView.RowFilter = "SJBMBM='" + ParentId + "'";
                    foreach (DataRowView drv in dataView)
                    {
                        TreeNode tn = TNC.Add(drv["BMBM"].ToString(), drv["BMMC"].ToString(), 0);//添加节点 
                        tn.Tag = drv["BMBM"].ToString();
                        //递归 
                        treeView1.SelectedNode = tn;
                        InitChildNodeTree(tn.Nodes, tn.Tag.ToString());
                    }
                    treeView1.ExpandAll();
                }
                catch (Exception Err)
                {
                    APPH.ErrModule.ShowErrBox("数据加载失败", Err);
                }
            }
      

  2.   

    跟一个问题,我想问一下handsome0308() ,使用你说的那种方法,怎么来显示第一层的节点前面是"+"号,还是"-"号呢?如果查询数据库,有数据的显示"+",没有的显示"-",但怎么来控制呢,看了看TreeNode属性,IsExpanded 只能获取不能设置阿:(,不胜感谢
      

  3.   

    在树的点击事件,或展开事件里做判断private void TreeView1_Expand(object sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e)
    {

    }
      

  4.   

    你说的是treeview web控件是吧,我想用的是winform的哦,刚看了看,web 的可以使用PopulateOnDemand 这个属性,form的没有呢。