C# Treeview加载问题

C# Treeview加载问题,c#,winforms,C#,Winforms,我在我的项目中使用TreeView来分层显示数据库中的数据。它适用于少量数据,比如500个条目。但是,当它超过了该条目数时,加载时间就太长了。我必须填充大量数据(比如2500个条目)。我有一个名为“tRegistered”的表,从中我将“Date”列绑定为treeview父节点。再次从同一个表中绑定“Users”列作为treeview节点。我的目标是以分层方式显示过去7天的所有注册用户。请帮助我如何进行 我的代码是: private void PopulateTreeView() { t

我在我的项目中使用TreeView来分层显示数据库中的数据。它适用于少量数据,比如500个条目。但是,当它超过了该条目数时,加载时间就太长了。我必须填充大量数据(比如2500个条目)。我有一个名为“tRegistered”的表,从中我将“Date”列绑定为treeview父节点。再次从同一个表中绑定“Users”列作为treeview节点。我的目标是以分层方式显示过去7天的所有注册用户。请帮助我如何进行

我的代码是:

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();      
    }
}

将所有子节点加载到TreeView控件后,尝试将根节点添加到该控件中。您应该会看到速度的巨大提高。

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

如果有许多子级别,则可能只需要对少数级别执行childTN.Expand(),甚至只需展开日期节点(tn)


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

完成后,首先调用treeview的BeginUpdate()方法EndUpdate()。
        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();