15 messaggi dal 23 febbraio 2005
Salve,
ho utilizzato un sitemap per alimentare una treeview come menu di navigazione del mio sito.
Avrei la necessità di annullare l'apertura di determinate pagine nel caso in cui una determinata variabile non sia ad un valore. In sostanza dovrevi overridare il comportamente della treeview (click) ed in caso di variabile non impostata non caricare la relativa pagina di link e magari rimandare l'utente ad un'altra pagina.
Ho visto che esiste l'evento SelectedNodeChanged ma non sò se è li che devo agire.
Spero di essere stato chiaro.
Vi ringrazio
Tiziano
Dipende dalla proprietà SelectAction relativa al singolo nodo.

Se SelectAction vale TreeNodeSelectAction.Select oppure TreeNodeSelectAction.SelectExpand, allora l'evento che viene lanciato è effettivamente SelectedNodeChanged (nel secondo caso anche l'evento TreeNodeExpanded).

Ulteriori dettagli su MSDN:
http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.treenode.selectaction.aspx

Ciao, Ricky.

Ing. Riccardo Golia
Microsoft MVP ASP.NET/IIS
ASPItalia.com Content Manager
http://blogs.aspitalia.com/rickyvr
http://ricky.aspitalia.com
http://www.riccardogolia.it
15 messaggi dal 23 febbraio 2005
Ciao,
mi sembra di capire che il mio problema è legato al fatto che la treeview è "bindata" con un sitemapdatasource.
Non sono riuscito ad entrare nelle proprietà di ogni singolo nodo e verificare la selectaction. Difatti l'evento SelectedNodeChanged non si scatena (ho inserito un breakpoint)
Esiste una soluzione?
tI RINGRAZIO
Tiziano
Nessun problema...

Puoi definire le politiche di binding tramite la collection DataBindings formata da elementi di tipo TreeNodeBinding. Tra le proprietà di TreeNodeBinding figura anche la proprietà SelectAction.

Esempio:

<asp:TreeView id="SampleTreeView" DataSourceID="SampleDataSource" runat="server">
         
<DataBindings>
<asp:TreeNodeBinding DataMember="Node1" TextField="Attribute1" SelectAction="SelectExpand" />
<asp:TreeNodeBinding DataMember="Node2" TextField="Attribute2" SelectAction="SelectExpand" />
</DataBindings>
         
</asp:TreeView>

<asp:XmlDataSource id="SampleDataSource" DataFile="Sample.xml" runat="server" />


Ulteriori dettagli su MSDN:
http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.treenodebinding.aspx

Ciao, Ricky.
Modificato da rickyvr il 12 giugno 2006 13.53 -

Ing. Riccardo Golia
Microsoft MVP ASP.NET/IIS
ASPItalia.com Content Manager
http://blogs.aspitalia.com/rickyvr
http://ricky.aspitalia.com
http://www.riccardogolia.it
15 messaggi dal 23 febbraio 2005
Scusate,ho difficoltà a capire la tecnica di databindings di una treeview.
ma non esiste una tecnica leggermente più semplice per scatenare l'evento SelectedNodeChange di una Treeview.
Il map xml del menù è il seguente:
<siteMapNode url="default.aspx" title="Home" description="Pagina iniziale">
<siteMapNode url="login.aspx" title="Login" description="Pagina accesso" />
<siteMapNode url="" title="Archivi" description="">
<siteMapNode url="attivitaOre.aspx" title="Inserimento ore" description="Pagina di inserimento ore" />
</siteMapNode>
<siteMapNode url="" title="configurazione" description="">
<siteMapNode url="settings.aspx" title="Parametri" description="Pagina configurazione sito" />
</siteMapNode>
<siteMapNode url="" title="Admin" description="">
<siteMapNode url="" title="" description="" />
</siteMapNode>
</siteMapNode>
</siteMap>
Quale dovrebbe essere all'incirca il codice di databindings per scatenare l'evento?
Vi ringrazio
Tiziano
public partial class TreeView : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
treeMap.SelectedNodeChanged += new EventHandler(TreeView1_SelectedNodeChanged);
}
void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
string s = treeMap.SelectedNode.Text;
}
}


<asp:TreeView ID="treeMap" runat="server" DataSourceID="siteMap">
<DataBindings>
<asp:TreeNodeBinding DataMember="SiteMapNode" SelectAction="SelectExpand" TextField="title" ValueField="url"  />
</DataBindings>
</asp:TreeView>
<asp:SiteMapDataSource ID="siteMap" runat="server" />


Ciao, Ricky.

Ing. Riccardo Golia
Microsoft MVP ASP.NET/IIS
ASPItalia.com Content Manager
http://blogs.aspitalia.com/rickyvr
http://ricky.aspitalia.com
http://www.riccardogolia.it
15 messaggi dal 23 febbraio 2005
Ringraziandoti anticipatamente per la tua cortesia, penso di aver capito dove stà il problema. Se una treeview legata ad una SiteMap Xml, quindi con degli url definiti esso non scatena l'evento selectednodechange, perchè penso il codice carica la pagina definita nell'url.
Se togli l'url l'evento si scatena. Ho provato la tua soluzione.
Cosa ottengo: l'evento si scatena, ma non vengono più caricate le pagine inserite nell'url di ogni nodo.
Ora, devo intervenire nell'evento per caricare le pagine?
Ti ringrazio
Tiziano
Se vuoi operare l'apertura della pagina senza usare implicitamente il NavigateUrl di ciascun nodo, devi eseguire il redirect nell'event handler di cambiamento della selezione dell'albero...

Non era quello che volevi?!?!

Ciao, Ricky.

P.S. Ti faccio notare che esiste anche l'attributo NavigateUrlText per ogni elemento TreeNodeBinding.

Ing. Riccardo Golia
Microsoft MVP ASP.NET/IIS
ASPItalia.com Content Manager
http://blogs.aspitalia.com/rickyvr
http://ricky.aspitalia.com
http://www.riccardogolia.it

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.