DataRow []drw = m_DataTabVal.Select("DIMENSION_CODE='"+clsComBoxa._code+"'");


foreach(DataRow valueCode in drw)
{  
TreeNode tnChird = new TreeNode(valueCode[1].ToString());
tnParent.Nodes.Add(tnChird);
}
this.m_treeView.Nodes.Add(tnParent);
根据我的筛选drw有1万七千多行,我将它们用freach()的形式添加到 tnParent 中。出了foreach循环为什么到this.m_treeView.Nodes.Add(tnParent);
就要至少7秒钟的时间???为什么这么慢。有什么方法解决吗???谢谢!!!
m_DataTabVal为DataTable

解决方案 »

  1.   

    加上
    treeview.BeginUpdate();
    ..
    treeview.EndUpdate();
      

  2.   

    用了MS的TreeView控件就没什么更好的办法,就是这么慢,所以它不适宜用来展现如此多的数据,几百个节点以内就好了;并且,用TreeView控件展现上万条数据谁能看清楚?--这本身就没有太大实用价值如果确实要展现如此多的数据,那么应该考虑弃用TreeView控件,改用动态输出html的方式
      

  3.   

    treeview.BeginUpdate();
    ..
    treeview.EndUpdate();
    不行还是很慢。好像不起作用。
    this.m_treeView.SuspendLayout();

    this.m_treeView.ResumeLayout();
    这样也不行。
      

  4.   

    你可以通过存储过程来解决。
    首先在存储过程里建一个临时表,这个表要按照树的形式建,把数据过滤掉之后存到这个表里,再把这个表返回填充到TreeView上就行了。
      

  5.   

    楼上说的没错!不过我们要提供所有的数据以便点下后可以托动,而且也明确需要用treeview这种有树子父节点的这种方式,但是我发现一条一条比如
    foreach(DataRow valueCode in drw)
    {  
    TreeNode tnChird = new TreeNode(valueCode[1].ToString());
    tnParent.Nodes.Add(tnChird);
    }
    的时侯,速度还是挺快的。整个循环才不到半秒
    但是
    this.m_treeView.Nodes.Add(tnParent);
    这条确要七秒。很奇怪