如何防止我的树视图崩溃?

时间:2009-03-16 16:27:51

标签: c# .net asp.net treeview

我在ASP.NET中使用C#2.0和Visual Studio 2005.我正在使用母版页和内容页。我在母版页中有一个树视图菜单,当用户选择任何菜单项时,我会重定向到该内容页面。

我的问题是,在用户导航到内容页面后,所有treenodes刷新并且结构已折叠。我希望所选的treenode保持扩展。

有人可以帮帮我吗?

4 个答案:

答案 0 :(得分:17)

当您刷新树视图时,您想要调用treeView1.ExpandAll();

还为BeforeCollapse添加一个事件,并将事件的Cancel属性设置为true,以防止用户折叠您的treenodes。

private void treeView1_BeforeCollapse(object sender, TreeViewCancelEventArgs e)
{
    e.Cancel = true;
}

希望这有帮助。

-jeremy

答案 1 :(得分:2)

如果您使用SiteMapDataSource控件作为TreeView的数据源,这是一个很常见的问题,由ASP.NET自动处理。在这种情况下,您还没有提到TreeView的数据源是什么。

您还没有提到TreeView是否包含链接(设置了NavigateUrl属性)或者每次点击都回发的文本项。如果是前者,那么据我所知,你运气不好!这是因为没有针对设置了NavigateUrl的TreeNode引发选择事件。它们只是作为常规超链接运行。

但是,如果是后者,那么您可以尝试以下步骤:

a。处理TreeView的SelectedNodeChanged事件。在此事件处理程序中,检索SelectedNode.ValuePath属性的当前值并将其存储在ViewState / Session中。使用SelectedNode的Value有条件地将页面重定向到映射到它的URL。

如下所示:

protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e) 
{ 
  TreeNode selNode = TreeView1.SelectedNode; 
  string pathToNode = selNode.ValuePath; 
  Session.Add("SelPath", pathToNode); 

  switch (selNode.Value) 
  { 
  //Redirect to URL accordingly. 
  } 
} 

b。在主页面(您重定向的页面)的后续加载中,检索先前设置的ValuePath的值并找到之前选择的节点并{{1它。

如下所示:

Expand

请注意,我没有机会测试代码,所以这主要是假设的。

答案 2 :(得分:0)

尝试使用OnTreeNodeDataBound事件和treeView.SelectedNode属性

此外,可能想要检查将TreeView绑定到DataSource的方式/时间。你可能会在IsPostBack上重新绑定它,它会重新渲染树。

TreeView应该在PostBack上维护它的节点。

答案 3 :(得分:0)

即使您使用母版页,一旦用户导航到内容页面,它将呈现为新的/不同的页面。由于Master页面加载了相同的树视图但不是同一个实例。您需要存储和加载扩展的节点。