我在项目中使用TreeView来从数据库中分层显示我的数据。它适用于少量数据,比如500个条目。但是当它超过这个条目数时,加载就会花费太多时间。我必须填充大量数据(比如2500个条目)。我有一个名为" tRegistered"我约束的地方"日期"列作为treeview父节点。再次从同一张桌子上我绑定了#34;用户" column as treeview Node。我的目标是以分层方式显示过去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();
}
}
答案 0 :(得分: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。
答案 1 :(得分:0)
在将所有子节点加载到TreeView控件后,尝试将根节点添加到TreeView控件。你应该看到一个巨大的速度提升。