2009-03-16 3 views
3

Я использую ASP.NET с C# 2.0 и Visual Studio 2005. Я использую страницу главной страницы и содержимого. У меня есть меню treeview на главной странице, и когда пользователь выбирает любой пункт меню, я перенаправляюсь на эту страницу контента.Как предотвратить разрушение моего дерева?

Проблема заключается в том, что после того, как пользователь перейдет на страницу содержимого, все обновления treenodes и структура будут свернуты. Я хочу, чтобы выбранный treenode оставался расширенным.

Может ли кто-нибудь помочь мне?

ответ

16

При обновлении древовидного дерева вы хотите вызвать treeView1.ExpandAll();

Также добавьте событие для BeforeCollapse и установите для свойства Отменить событие значение true, чтобы пользователь не мог свернуть ваши treenodes.

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

Надеюсь, это поможет.

-jeremy

+0

где я могу написать ваш код, пожалуйста? – Kartik

0

Попробуйте использовать событие OnTreeNodeDataBound и свойство treeView.SelectedNode

Кроме того, возможно, захотите проверить, как/когда вы связываете свой TreeView, чтобы это DataSource. Вы можете восстановить его на IsPostBack, который будет повторно отображать дерево.

TreeView должен поддерживать свои узлы в PostBack.

0

Несмотря на то, что вы используете главную страницу, как только пользователь переходит на страницу содержания, она отображается как новая/другая страница. Из-за главной страницы загружается одно и то же дерево, но не тот же экземпляр. Вам нужно будет хранить и загружать узлы.

2

Это довольно распространенная проблема, которая автоматически обрабатывается ASP.NET, если вы используете элемент управления SiteMapDataSource в качестве источника данных для вашего TreeView. В этом случае вы не указали, что такое Datasource вашего TreeView.

Вы также не указали, содержит ли TreeView ссылки (устанавливается свойство NavigateUrl) или текстовые элементы, которые возвращают для каждого щелчка. Если это первый, то, насколько я знаю, вам не повезло! Это связано с тем, что ни один из событий выбора не поднят для TreeNodes, у которых есть их NavigateUrl. Они просто функционируют как обычные гиперссылки.

Однако, если это последнее, то вы можете попробовать следующие шаги:

а. Обращение с событием TreeView SelectedNodeChanged. В этом обработчике событий извлеките текущее значение свойства SelectedNode.ValuePath и сохраните его в ViewState/Session. Используйте Value из SelectedNode, чтобы условно перенаправить страницу на 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. 
    } 
} 

б. При последующей загрузке главной страницы (страницы, на которую вы перенаправляете), установите ранее установленное значение ValuePath и найдите ранее выбранный узел и Expand.

Что-то вроде следующего:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) 
    { 
    string pathToNode = (string)Session("SelPath"); 
    Session.Remove("SelPath"); 
    TreeNode selNode = TreeView1.FindNode(pathToNode); 
    if (selNode != null) 
    { 
     selNode.Expand(); 
    } 
    } 
} 

Обратите внимание, что у меня не было возможности проверить код, так что это в основном гипотетически.

Смежные вопросы