使用循环来创建节点对象效率
有如下代码:
while (odr_1 != null && odr_1.Read())
{
TreeNode t_child = new TreeNode();
t_child.Value = odr_1["ID"].ToString();
t_child.Text = odr_1["xzqmc"].ToString();
t_parent.ChildNodes.Add(t_child);
if (level > 1)
node_insert(t_child, level - 1);
}
odr_1.Close();
当循环次数多时,性能明显受到影响,要怎么修改?
请教高手!PS:有说每次装载n+1层。
展开下一层后再往下一层。
装载的时候锁住更新。
那怎么实现呢?谢谢
有如下代码:
while (odr_1 != null && odr_1.Read())
{
TreeNode t_child = new TreeNode();
t_child.Value = odr_1["ID"].ToString();
t_child.Text = odr_1["xzqmc"].ToString();
t_parent.ChildNodes.Add(t_child);
if (level > 1)
node_insert(t_child, level - 1);
}
odr_1.Close();
当循环次数多时,性能明显受到影响,要怎么修改?
请教高手!PS:有说每次装载n+1层。
展开下一层后再往下一层。
装载的时候锁住更新。
那怎么实现呢?谢谢
TreeNode root=new TreeNode();
root.Text="";
this.TreeView1.Nodes.Add(root);
this.InitTree(this.TreeView1.Nodes[0].Nodes,0,dt);
protected void initTree(DataTable dt, string nFather, TreeNode fatherNode)
{
DataView dv = new DataView(dt);
dv.RowFilter = "sNum='"+nFather+"'";
foreach (DataRowView Row in dv)
{
TreeNode node = new TreeNode();
if (是否有子集)
{
node.Value = Row[""].ToString();
node.Text = Row[""].ToString();
fatherNode.ChildNodes.Add(node);
initTree(dt, Row["pNum"].ToString(), node);
}
else
{
node.Text = Row[""].ToString();
node.Value = Row[""].ToString();
fatherNode.ChildNodes.Add(node);
}
}
}
http://topic.csdn.net/u/20090825/09/35619369-e39b-4b8c-9659-f5e07e2f826d.html
http://topic.csdn.net/u/20090729/20/c108a8a9-7faf-4066-9135-1b52a7b50345.html
另外用递归是一层一层的展开吗?
那循环里面的 t_child.Value = odr_1["ID"].ToString();
t_child.Text = odr_1["xzqmc"].ToString();
中的ID和xzqmc在递归里不需要写了吗?
... AddNode...
TV.EndUpdate();
或者最外面再包一层
this.SuspendLayout();
this.ResumeLayout(true);
TreeView TV; TV.BeginUpdate();
while (odr_1 != null && odr_1.Read())
{
TreeNode t_child = new TreeNode();
t_child.Value = odr_1["ID"].ToString();
t_child.Text = odr_1["xzqmc"].ToString();
t_parent.ChildNodes.Add(t_child);
if (level > 1)
node_insert(t_child, level - 1);
}
odr_1.Close();
TV.EndUpdate();
TV.BeginUpdate();
try
{
while (odr_1 != null && odr_1.Read())
{
TreeNode t_child = new TreeNode();
t_child.Value = odr_1["ID"].ToString();
t_child.Text = odr_1["xzqmc"].ToString();
t_parent.ChildNodes.Add(t_child);
if (level > 1)
node_insert(t_child, level - 1);
}
odr_1.Close();
}
finally
{
TV.EndUpdate();
this.ResumeLayout(true); }
此外如果节点比较多,最好不要递归,而是只购建第一级节点,点击节点后再购建下一层子节点
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace WindowsFormsApplication39
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); TreeView TV = new TreeView();
TV.Parent = this;
TV.Dock = DockStyle.Fill; TreeNode TN = TV.Nodes.Add("根");
TV.AfterSelect += new TreeViewEventHandler(TV_AfterSelect);
} void TV_AfterSelect(object sender, TreeViewEventArgs e)
{
// 实际可以从数据库里读出来
e.Node.Nodes.Add((e.Node.Level + 1) + " " + NowString());
e.Node.Nodes.Add((e.Node.Level + 1) + " " + NowString());
e.Node.Nodes.Add((e.Node.Level + 1) + " " + NowString());
e.Node.Expand();
} String NowString()
{
return DateTime.Now.ToString("HH:mm:ss.fff");
}
}
}