2009-03-16 15 views
3

C#2.0とVisual Studio 2005でASP.NETを使用しています。私は、マスタページとコンテンツページを使用しています。マスターページにツリービューメニューがあり、ユーザーがメニュー項目を選択すると、そのコンテンツページにリダイレクトされます。ツリービューが崩れないようにするにはどうすればよいですか?

私の問題は、ユーザーがコンテンツページに移動した後、すべてのツリーがリフレッシュされ、構造が折りたたまれてしまうことです。私は選択されたtreenodeを拡大したままにしておきたい。

誰かが私を助けることができますか?

答えて

16

treeview1.ExpandAll()を呼び出すツリービューを更新するとき。

また、BeforeCollapseのイベントを追加し、イベントのCancelプロパティをtrueに設定して、ユーザーがあなたのtreenodesを折り畳まないようにします。

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

これが役立ちます。

-jeremy

+0

どこでコードを書いていいですか? – Kartik

0

をOnTreeNodeDataBoundイベントを使用して試してみて、treeView.SelectedNodeプロパティまた、あなたはそれのDataSourceにあなたのツリービューを結合している方法/ときチェックしたいかもしれません。ツリーを再描画するIsPostBackに再バインドしている可能性があります。

TreeViewはPostBack上にノードを維持する必要があります。

0

マスターページを使用していても、ユーザーがコンテンツページに移動すると、新しい/別のページとしてレンダリングされます。マスタページのため、同じツリービューがロードされますが、同じインスタンスはロードされません。展開されたノードを格納して読み込む必要があります。

2

これは、SiteMapDataSourceコントロールをTreeViewのデータソースとして使用すると、ASP.NETによって自動的に処理される十分な問題です。この場合、あなたはあなたのTreeViewのDatasourceが何であるかについて言及していません。

また、ツリービューにリンクが含まれている(NavigateUrlプロパティが設定されている)か、クリックごとにポストバックするテキストアイテムが含まれているかどうかについては言及していません。それが前者なら、私が知る限り、あなたは運がありません!これは、NavigateUrlが設定されたTreeNodeに対してSelectionイベントが発生しないためです。彼らは通常のハイパーリンクとして機能します。しかし、それは後者である場合

、その後、次の手順を試してみることができます。

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の値を取得し、以前に選択したノードと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(); 
    } 
    } 
} 

注私は、コードをテストする機会がなかったので、これは主に架空のです。

関連する問題