asp.net网站在VS2005下用C#写了一个treeview,其中的子结点和叶节点的内容 均是从数据库中读取,数量很大,所以加载起来比较慢,在未加载完成时点击节点展开会报错,报错内容是MicroSoft JScript错误:TreeView1_data内容未定义 听说有一种方法是分级加载
分级加载,第一次只加载根级,如果用户单击某个节点时(先判断是否加载过,如果未加载,则加载),但每一次只加载一个级,逐级加载直到末级,这样的话就会很快,而且用户未点击的节点也无需加载子级,所以就会很快. 非常想看到源码,非常感谢
分级加载,第一次只加载根级,如果用户单击某个节点时(先判断是否加载过,如果未加载,则加载),但每一次只加载一个级,逐级加载直到末级,这样的话就会很快,而且用户未点击的节点也无需加载子级,所以就会很快. 非常想看到源码,非常感谢
A
AA
AAA
AAB
AB
ABA
ABB
...
首先SELECT出来第一级节点(A.B.C...),把结果添加到根节点之下,然后给每个新节点加一个空节点,
给TREEVIEW的展开事件编码,每次展开前首先判断被展开节点是否只有一个空节点,如果是,则SELECT他的子节点,并添加到该级下,如果无子节点,删掉空节点
2.设置树控件,使PopulateNodesFromClient="true"
3.定义树控件TreeNodePopulate即可可以参见MSDN上的例子
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
int i;
for (i = 0; i < 3; i++)
{
TreeView1.Nodes.Add(new TreeNode("A"));
TreeView1.Nodes[i].Value = i.ToString();
}
}
}
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
int i, j;
i = Convert.ToInt32(TreeView1.SelectedNode.Value.ToString());
for (j = 0; j < 3; j++)
{
TreeView1.Nodes[i].ChildNodes.Add(new TreeNode("B"));
TreeView1.Nodes[i].ChildNodes[j].NavigateUrl = "B";
}
}
}不知道楼主是不是这个意思?
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
int i;
for (i = 0; i < 3; i++)
{
TreeView1.Nodes.Add(new TreeNode("A"));
TreeView1.Nodes[i].Value = i.ToString();
}
}
}
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
int i, j;
i = Convert.ToInt32(TreeView1.SelectedNode.Value.ToString());
for (j = 0; j < 3; j++)
{
TreeView1.Nodes[i].ChildNodes.Add(new TreeNode("B"));
TreeView1.Nodes[i].ChildNodes[j].NavigateUrl = "B";
}
}
我觉得楼主应该是想要这种效果吧?