2013-03-24 73 views
1

我在我的项目中使用TreeView来从数据库中分层显示我的数据。对于少量数据,比如说500个条目,它工作正常。但是,如果超过了这些条目数量,则装入时间过长。我必须填充大量数据(比如说2500个条目)。我有一个名为“tRegistered”的表,其中我将“Date”列绑定为treeview父节点。再次从同一张表中,我将“用户”列绑定为treeview节点。我的目标是以分层方式显示最近7天的所有注册用户。请帮助我如何继续。Treeview加载问题

我的代码是:

private void PopulateTreeView() 
{ 
    treeView1.Nodes.Clear(); 

    SqlDataAdapter daPatient = new SqlDataAdapter("SELECT TOP 100 PERCENT pId, pDate, pName FROM tRegistered WHERE pDate >= DATEADD(day,-7, GETDATE())", con); 
    SqlDataAdapter daDate = new SqlDataAdapter("SELECT  TOP 100 PERCENT pDate FROM tRegistered 
     WHERE  pDate >= DATEADD(day, - 7, GETDATE())) 
     GROUP BY pDate 
     ORDER BY pDate DESC", con); 

    DataSet ds = new DataSet(); 
    daPatient.Fill(ds, "tRegistered"); 
    daDate.Fill(ds, "tRegistered"); 

    //Add root node 
    TreeNode root = new TreeNode("Registered"); 
    treeView1.Nodes.Add(root);  //Hard code 

    ds.Relations.Add("Regsd", ds.Tables["tRegistered"].Columns["pDate"], ds.Tables["tRegistered"].Columns["pDate"]); 
    foreach (DataRow dr in ds.Tables["tRegistered"].Rows) 
    { 
     DateTime dt = Convert.ToDateTime(dr["pDate"]); 
     TreeNode tn = new TreeNode(String.Format("{0:dd-MMM-yyyy}", dt)); 

     foreach (DataRow drChild in dr.GetChildRows("Regsd")) 
     { 

      TreeNode childTn = new TreeNode(drChild["pId"].ToString() + "- " + drChild["pName"].ToString()); 
      childTn.Tag = drChild["pId"]; 
      tn.Nodes.Add(childTn); 
     } 

     root.Nodes.Add(tn); 
     root.Expand();  
    } 
} 
+0

完成后,首先调用树视图的BeginUpdate()方法,EndUpdate()。 – 2013-03-24 22:25:57

回答

3

使用TreeView1.BeginUpdate()和EndUpdate()可以防止GUI不断更新。

如果您有很多子级别,您可能只想为几个级别执行childTN.Expand(),或者甚至只是展开Date节点(tn)。

 TreeNode root = new TreeNode("Registered"); 
     root.Expand(); 
     ds.Relations.Add("Regsd", ds.Tables["tRegistered"].Columns["pDate"], ds.Tables["tRegistered"].Columns["pDate"]); 
     foreach (DataRow dr in ds.Tables["tRegistered"].Rows) 
     { 

      DateTime dt = Convert.ToDateTime(dr["pDate"]); 
      TreeNode tn = new TreeNode(String.Format("{0:dd-MMM-yyyy}", dt)); 
      tn.Expand(); 

      foreach (DataRow drChild in dr.GetChildRows("Regsd")) 
      { 

       TreeNode childTn = new TreeNode(drChild["pId"].ToString() + "- " + drChild["pName"].ToString()); 
       childTn.Tag = drChild["pId"]; 
       childTN.Expand(); 
       tn.Nodes.Add(childTn); 

      } 

      root.Nodes.Add(tn); 
      //root.Expand();  
     } 
     TreeView1.BeginUpdate(); 
     TreeView1.Nodes.Add(root);  //Hard code 
     TreeView1.EndUpdate(); 

编辑:改变了文本和代码snipet。

+0

非常感谢你......它的工作速度很快,然后才开始。 – Apurba 2013-03-24 22:51:04

+0

不客气。 – Daro 2013-03-25 07:12:04

0

尝试添加根节点到TreeView控件已加载所有的子节点进去之后。你应该看到一个巨大的速度提升。