Nochmals Treeview und Masterpage

12/05/2008 - 19:59 von Thomas Elser | Report spam
Hallo,

ich habe ein Treeview auf einer Masterpage welches Teil der Navigation ist.
Die Datasource für das Treeview ist ein XML File.
Jeder Childnode ist ein Hyperlink der zu einer entsprechenden Seite
verlinkt. Auf der verlinkten Seite hàtte ich nun gerne das genau
dieser Node wieder expanded ist. Leider funktioniert ja auf einer Masterpage
das mit dem State behalten des Treeviews nicht "out of the box".

Kann mir bitte jemand (wenn geht etwas genauer) erklàren wie ich das
erreichen kann?

Danke vorab und LG

Thomas
 

Lesen sie die antworten

#1 Marcel Garaventa
13/05/2008 - 11:18 | Warnen spam
Hallo Thomas

Ich hatte dieses Problem auch. Ich habe es schlussentlich lösen können.
Villeicht ist dies nicht die beste Art die ich Dir vorstelle, aber sie
funktioniert.

Ich habe eine Einheitsklasse mit dem Namen Haeder gemacht. Von dieser leite
ich alle Seiten in meinem, Web-Auftritt ab. Schlisslich muss ich dann nur
noch auf jeder meiner Webform die Methode Select aufrufen. Diese erledigt
dann den Rest für mich. Die Methode Select der Klasse Haeder selektiert für
mich den ausgewàhlten Node in der TreeView und wenn der Node die Eigenschaft
SelectExpand hat wird der Knoten gleich Expandiert. Hier nun mein Code:

Code einer Webform:
Public Partial Class leistungskatalog_inop
Inherits StandardINOP
#Region "Definitionen"
Dim sPfad As String = "Leistungskatalog (was)/Leistungskatalog INOP"
#End Region
#Region "Methoden"
Protected Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
myHaeder.Select(sPfad)
End Sub
#End Region
End Class

Code der Standartklasse INOP:
Public MustInherit Class StandardINOP
Inherits System.Web.UI.Page
#Region "Definitionen"
Protected myHaeder As New Haeder(Me)
#End Region
End Class

Code der Klasse Haeder:
Public Class Haeder
#Region "Eigenschaften"
Private smPfad As String
Public Property Pfad() As String
Get
Return smPfad
End Get
Set(ByVal sPfad As String)
smPfad = sPfad
End Set
End Property

Private myPage As System.Web.UI.Page
Public Property Page() As System.Web.UI.Page
Get
Return myPage
End Get
Set(ByVal cPage As System.Web.UI.Page)
myPage = cPage
End Set
End Property

Private smImageUrl As String
Public Property ImageUrl() As String
Get
Return smImageUrl
End Get
Set(ByVal sImageUrl As String)
smImageUrl = sImageUrl
End Set
End Property

Private bmZeitAnzeigen As Boolean
Public Property ZeitAnzeigen() As Boolean
Get
Return bmZeitAnzeigen
End Get
Set(ByVal bZeitAnzeigen As Boolean)
bmZeitAnzeigen = bZeitAnzeigen
End Set
End Property
#End Region
#Region "Methoden"
Public Sub New()
End Sub

Public Sub New(ByVal cPage As System.Web.UI.Page)
Me.Page = cPage
End Sub

Public Sub New(ByVal cPage As System.Web.UI.Page, ByVal sPfad As String)
Me.Page = cPage
Me.Pfad = sPfad
End Sub

Public Sub New(ByVal cPage As System.Web.UI.Page, ByVal sPfad As String,
ByVal bZeitAnzeigen As Boolean)
Me.Page = cPage
Me.Pfad = sPfad
Me.ZeitAnzeigen = bZeitAnzeigen
End Sub

Public Sub New(ByVal cPage As System.Web.UI.Page, ByVal sPfad As String,
ByVal sImageUrl As String)
Me.Page = cPage
Me.Pfad = sPfad
Me.ImageUrl = sImageUrl
End Sub

Public Sub New(ByVal cPage As System.Web.UI.Page, ByVal sPfad As String,
ByVal bZeitAnzeigen As Boolean, ByVal sImageUrl As String)
Me.Page = cPage
Me.Pfad = sPfad
Me.ZeitAnzeigen = bZeitAnzeigen
Me.ImageUrl = sImageUrl
End Sub

Public Sub [Select]()
Dim myTreeView As System.Web.UI.WebControls.TreeView =
CType(Me.Page.Master.FindControl("trwINOP"),
System.Web.UI.WebControls.TreeView)
Dim myTreeNode As System.Web.UI.WebControls.TreeNode =
myTreeView.FindNode(Me.Pfad)
myTreeNode.Selected = True

If Not myTreeNode.Parent Is Nothing Then
Me.Expand(myTreeNode.Parent)
End If

If myTreeNode.SelectAction =
System.Web.UI.WebControls.TreeNodeSelectAction.SelectExpand Then
Me.Expand(myTreeNode)
End If

If Me.ZeitAnzeigen = True Then
Dim myZeit As System.Web.UI.WebControls.Label =
CType(Me.Page.Master.FindControl("lblZeit"), System.Web.UI.WebControls.Label)
myZeit.Text = "Stand vom " & System.DateTime.Now.ToString("g")
End If

If Not Me.ImageUrl = "" Then
Dim myLogo As System.Web.UI.WebControls.Image =
CType(Me.Page.Master.FindControl("imgLogo"), System.Web.UI.WebControls.Image)
myLogo.ImageUrl = Me.ImageUrl
End If
End Sub

Public Sub [Select](ByVal sPfad As String)
Me.Pfad = sPfad
Me.Select()
End Sub

Private Sub Expand(ByVal cTreeNode As System.Web.UI.WebControls.TreeNode)
If Not cTreeNode.Parent Is Nothing Then
Me.Expand(cTreeNode.Parent)
End If

cTreeNode.Expand()
End Sub
#End Region
End Class

Alles was für Dich wesentlich ist steht in der Methode Select der Klasse
Haeder. Du musst also nicht alles nachbauen. Wir hatten hier noch ein paar
weitere Voraussetzungen.

Gruss Marcel


"Thomas Elser" wrote:

Hallo,

ich habe ein Treeview auf einer Masterpage welches Teil der Navigation ist.
Die Datasource für das Treeview ist ein XML File.
Jeder Childnode ist ein Hyperlink der zu einer entsprechenden Seite
verlinkt. Auf der verlinkten Seite hàtte ich nun gerne das genau
dieser Node wieder expanded ist. Leider funktioniert ja auf einer Masterpage
das mit dem State behalten des Treeviews nicht "out of the box".

Kann mir bitte jemand (wenn geht etwas genauer) erklàren wie ich das
erreichen kann?

Danke vorab und LG

Thomas



Ähnliche fragen