2013-03-24 53 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控件已加載所有的子節點進去之後。你應該看到一個巨大的速度提升。