程序段如下:
    SqlCmd = "select FieldA,FieldB from TableA"
    Rs.Open SqlCmd, Aconn
    While Not Rs.EOF
        TViewKHLB.Nodes.Add Trim(Rs("FieldA")), 4, Rs("FieldB"), Rs("FieldB")
        'CurKH = CurKH + 1
        'frmTemp.PBar1.Value = CurKH
        Rs.MoveNext
        'DoEvents
    Wend
    Rs.CloseFieldA是上一层相对应的节点的text。FieldB是这一层treeview的text和key。
这个RecordSet大约有10000多条数据。在实际运行中,发现这一段代码运行所需时间极长。被注释掉的几句是用来观察add的速度的,从中发现一个问题,就是越往后,treeview add 的速度就越慢。在我的机器上(P4 1.7G,256M)运行大约要10多分钟,而在客户的急器(塞扬1.7G,256M)居然约50分钟!这个谁也受不了。所以我想问一下:
1、有没有可以替代ms treeview控件的控件,能够很好的解决这个速度问题?
2、如果没有的话,如何操作才能避免这个问题?需要注意的是,在我的程序里边,有可能会碰到一个节点下边就有上万个子节点的情形。先谢谢各位高人了!如能解决问题,另有200分相赠!

解决方案 »

  1.   

    成万条记录,我想不必要用treeview了吧,建议方法:
    1、窗体左右放两个datagrid;
    2、将你上面的记录集放到左边的datagrid,一两秒就赋给datagrid了;
    3、左面的datagrid应该有一个关键字,当单击左面datagrid行时,用这个关键字去查找其下的子节点,将查到的记录集赋给右面的datagrid。
    4、这个关联我想如果是两层的树就很好用,但三层或以上的就...看下面的方法用过程表:
    将你的树变成记录集,如:
    1    2    6
    1    2    10
    1    2    9
    1    3    7
    1    4    8
    的树,变成记录集后赋给mshflexgrid,然后合并,得到结果是:
              6
          2   10
    1         9
          3   7
          4   8
    是不是有树的感觉了。^_^
      

  2.   

    这个问题,啊,主要是客户习惯了。他才不知道什么叫datagrid呢,也不知道怎么用 :(
      

  3.   

    如果一定要用treeview,那你干脆这样算了:将第一层分类(没成万个类吧?类越少当然越快啦),启动时将第一层放上treeview,然后当单击展开时才入数据。(我未试过呵,因为未试过这么多节的。)^_^
      

  4.   

    //没有树的感觉!晕,mshflexgrid合并后很好看的。报表用这个做比较好。^_^
      

  5.   

    如果一定要用treeview,那你干脆这样算了:将第一层分类(没成万个类吧?类越少当然越快啦),启动时将第一层放上treeview,然后当单击展开时才入数据。(我未试过呵,因为未试过这么多节的。)^_^-------------------------------------------------------------------这个想法当然是最自然的,我现在也想这么做。但是由于展开的这个节点就有上万个(!)子节点,所以我担心速度还是很慢。我现在的做法是取消最后这一层子节点,把这些节点的数据写入到另外一个listview里边。这就很快了。也许直接展开到treeview也很快,但是我没有试,因为我还不知道该怎么来写 :(
      

  6.   

    写入listview也很慢的。支持记录集绑定的datagrid和mshflexgrid就很快了。^_^