Forums Neueste Beiträge
 

TreeView manuell aufklappen!

13/01/2009 - 09:45 von Selami Sulejmani | Report spam
Hallo NG

Wie kann man einen TreeView der per XMLDataSource aufgefüllt wird,
manuell den zu aufgeklapten Knoten übergeben?

Mein TreeView ist auf der MasterPage:
<asp:TreeView ID="TVXMLNavi" runat="server" DataSourceID="XDSNavi"
OnDataBound="TVXMLNavi_DataBound"
MaxDataBindDepth="10"
PopulateNodesFromClient="False">
<DataBindings>
<asp:TreeNodeBinding DataMember="tblab" TextField="abName"
ValueField="abID" PopulateOnDemand="True" SelectAction="SelectExpand"
NavigateUrlField="abLink"/>
<asp:TreeNodeBinding DataMember="tblac" TextField="acName"
ValueField="acID" PopulateOnDemand="True" SelectAction="SelectExpand"
NavigateUrlField="acLink" />
<asp:TreeNodeBinding DataMember="tblad" TextField="adName"
ValueField="adID" PopulateOnDemand="True" SelectAction="SelectExpand"
NavigateUrlField="adLink"/>
</DataBindings>
</asp:TreeView>


Im NavigateUrlField übergebe ich ebenfalls die TreeNodes Value- und
TextField als QueryString mit. Das heisst bei jeder Seite weiss ich
welche Node geklickt wurde.

So auf der Contentseite habe ich folgendes:
protected void Page_Load(object sender, EventArgs e)
{
TreeView myNaviTree = (TreeView)Master.FindControl("TVXMLNavi");
TreeNode mySelectetdNode = new TreeNode();
mySelectetdNode.Value = Request.QueryString["buID"];

if (myNaviTree != null)
{
foreach (TreeNode nodes in myNaviTree.Nodes[0].ChildNodes)
{
if (nodes.Value == mySelectetdNode.Value)
{nodes.Expand();}
else {nodes.Collapse();}
}
}
}
So Bringt der aber eine Fehlermeldung: Index was out of range...


Kann mir da jemand bitte helfen.

Gruss Selami Sulejmani
 

Lesen sie die antworten

#1 Gerold Mittelstädt
13/01/2009 - 10:29 | Warnen spam
Hallo,

Selami Sulejmani schrieb:
Wie kann man einen TreeView der per XMLDataSource aufgefüllt wird,
manuell den zu aufgeklapten Knoten übergeben?

Im NavigateUrlField übergebe ich ebenfalls die TreeNodes Value- und
TextField als QueryString mit. Das heisst bei jeder Seite weiss ich
welche Node geklickt wurde.

So auf der Contentseite habe ich folgendes:
protected void Page_Load(object sender, EventArgs e)
{
TreeView myNaviTree = (TreeView)Master.FindControl("TVXMLNavi");
TreeNode mySelectetdNode = new TreeNode();
mySelectetdNode.Value = Request.QueryString["buID"];

if (myNaviTree != null)
{
foreach (TreeNode nodes in myNaviTree.Nodes[0].ChildNodes)
{
if (nodes.Value == mySelectetdNode.Value)



Warum prüfst Du hier nicht direkt auf nodes.Value == Request["buID"]? :)
Die eine Instanz der TreeNode ist überflüssig.

{nodes.Expand();}



Damit das funktioniert muss idr. rekursiv gearbeitet werden.

else {nodes.Collapse();}



Das TreeView ist standardmàßig immer zusammengeklappt (Ausnahme sind
hier PostBacks - die Du aber wohl nicht hast)

}
}
}
So Bringt der aber eine Fehlermeldung: Index was out of range...



Da steht sicher noch mehr dabei. - der Stack z.B.
Wobei ich vermute, dass es bei myNaviTree.Nodes[0] kracht - was wiederum
wahrscheinlich daran liegt, an das TreeView noch keien Daten gebunden
worden sin.

Kann mir da jemand bitte helfen.



Du willst ein TreeView zur Navigation, das jeweils die aktuelle Seite
ausklappt?
Dann les Dir mal
http://groups.google.com/group/micr...99b487ba1d
durch.

Viele Grüße!

Ähnliche fragen