161 messaggi dal 07 settembre 2009
Salve a tutti =)
in questa discussione http://forum.aspitalia.com/forum/post/393011/Menu-ListView-Nidificati.aspx si è parlato di come creare un template gerarchico personalizzato, in opposizione all'utilizzo poco performante dei ListView nidificati.

A questo punto avrei bisogno di inserire anche dei tasti lato server ad ogni riga per effettuare operazioni su ognuna di esse, ma ho delle difficoltà a riguardo.

Vorrei implementare nel template custom la stessa funzione OnItemCommand del ListView ma non riesco a trovare informazioni a riguardo.
Devo anche implementare la classe corrispettiva al ListViewDataItem per poter lavorare sulla singola riga.

Ci sono consigli su dove cominciare a cercare?

Come sempre grazie per la disponibilità.


Davide
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Davide,

la volta scorsa abbiamo risolto la questione del creare una sorgente dati di tipo IHierarchicalEnumerable, mentre adesso la necessità è quella di disporre di uno HierarchicalDataBoundControl che visualizzi quei dati e che al contempo sia sufficientemente versatile nella personalizzazione, proprio come una ListView.

ASP.NET ti mette a disposizione il TreeView ma non ti consente di cambiare il template del nodo. Dunque bisogna ricorrere a qualcos'altro.
Cercando "ASP.NET Templated treeview", per esempio, salta fuori questo.
http://www.codeproject.com/Articles/31577/An-ASP-NET-AJAX-TreeView-control-with-templates
Ti consente di avere template diversi per visualizzazione e modifica. Inoltre ha la possibilità di mostrare un menu contestuale sul tasto destro, nel caso ne avessi bisogno.
Pensi che faccia al caso tuo?
Modificato da BrightSoul il 22 luglio 2013 21.43 -

Enjoy learning and just keep making
161 messaggi dal 07 settembre 2009
Come sempre grazie per la risposta.

Non sono molto sicuro che la soluzione sia quella che cercavo, o almeno non riesco a trovare la parte di codice di mio interesse.

Quello che cercavo era un modo per implementare nella soluzione precendete dei tasti lato server.

Quindi ora ho un template gerarchico completamente personalizzabile, e voglio poter aggiungere a questo template dei tasti lato server, riconoscendo la riga a cui il tasto appartiene e applicandovi le modifiche relative al tasto premuto (modifica, inserimento, eliminazione ecc...)

Per ora ho utilizzato il jquery ma può andar bene in alcune situazioni e non in altre.


Davide
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

doppiomango ha scritto:

voglio poter aggiungere a questo template dei tasti lato server

scarica il progetto allegato all'articolo, penso che gli esempi che troverai al suo interno riflettano proprio quello che descrivi.

Ad esempio, nella pagina Default.aspx trovi vari LinkButton (ma potrebbero anche essere dei normali Button) che scatenano eventi lato server.

Anche uno degli screenshots ti mostra come sia possibile usare dei LinkButton per far entrare il nodo selezionato in modalità di editing.

A guardarlo, mi sembra che quel progetto incontri le tue necessità.
Ho capito male quello di cui hai bisogno?

Tuttavia, io non sono riuscito a farlo funzionare subito. Il progetto ha 5 anni, potrebbe esserci stato qualche problema nella conversione a Visual Studio 2012, non ho avuto modo di indagare. Avendo tempo a disposizione si dovrebbe riuscire a riportare in sesto.

L'altra difficoltà è che questo supporta fonti di dati IHierarchicalDataSource, mentre quello che avevamo implementato noi l'altra volta era un IHierarchicalEnumerable. Anche questo si riesce a sistemare.

ciao
Modificato da BrightSoul il 02 luglio 2013 00.26 -

Enjoy learning and just keep making
161 messaggi dal 07 settembre 2009
Quindi il lavoro fatto fin'ora non permette l'implementazione dei tasti e devo cambiare sistema?

Quello che mi hai linkato contiene (in parte) ciò che mi serve, quindi hai capito bene, ma speravo bastasse implementare una classe o un'interfaccia (o anche più di una) per risolvere il tutto.

Il progetto l'ho scaricato ma non riesco a creare l'eseguibile per poterlo far partire (essendoci un output di libreria di classi non mi parte premendo semplicemente "play"), e non riesco ad individuare gli elementi che permettono l'utilizzo dei button (o linkbutton in questo caso).

Come sempre grazie per l'aiuto.

Davide
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
doppiomango ha scritto:

Quindi il lavoro fatto fin'ora non permette l'implementazione dei tasti e devo cambiare sistema?

sì, quel progetto che ti ho linkato permette di lavorare con bottoni che scatenano eventi server. Eventualmente i bottoni possono anche essere aggiunti dinamicamente, in base al DataItem del nodo corrente.
Ecco, qui trovi un progetto in cui ci sono due LinkButton per ogni nodo. Un terzo viene aggiunto dinamicamente solo sui nodi foglia.
Al click su uno dei LinkButton si scatenerà un evento server da cui potrai accedere e controllare il relativo nodo.

doppiomango ha scritto:

speravo bastasse implementare una classe o un'interfaccia

E' così. L'IHierarchicalEnumerable che avevamo implementato l'altra volta non era sufficiente perché, questo particolare controllo, non lavora con quell'interfaccia. E' stato necessario implementare anche IHierarchicalDataSource, ma sono bastate poche righe di codice. Vedi il sorgente.

doppiomango ha scritto:
non riesco ad individuare gli elementi che permettono l'utilizzo dei button

è un comune templated control, quindi dentro NodeTemplate, EditNodeTemplate e ContextMenuTemplate puoi inserire tutti i controlli server che vuoi.

Spero di averti convinto che questa è una soluzione attuabile :]

ciao

Enjoy learning and just keep making
161 messaggi dal 07 settembre 2009
Penso di aver capito.

Dunque, con IHierarchicalEnumerable posso lavorare con dei dati gerarchici, ma non ho modo di utilizzarlo con dei controlli che gestiscano i button. Al contrario IHierarchicalDataSource permette di lavorare con dei dati gerarchici che andrò ad associare a controlli come il TreeView, che a sua volta permette invece l'utilizzo di button.

E' corretto?

Questo significa che sono legato a dei controlli con un markup non pienamente customizzabile...

BrightSoul ha scritto:

doppiomango ha scritto:
non riesco ad individuare gli elementi che permettono l'utilizzo dei button

è un comune templated control, quindi dentro NodeTemplate, EditNodeTemplate e ContextMenuTemplate puoi inserire tutti i controlli server che vuoi.

Intendevo che non trovavo il riferimento della gestione dei button nelle librerie e nelle classi, ma, se ho ben capito, dipende tutto dal fatto che si utilizza un controllo TreeView, che è ciò che ne permette l'utilizzo.

In breve non posso usare lo stesso controllo creato nell'altra discussione.

Ho raggiunto uno stato di illuminazione sull'argomento o mi sono limitato a dire un mucchio di sciocchezze?

Sempre grazie.

Davide
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Davide,

separiamo le questioni: da una parte hai una classe che agisce da sorgente dati, mentre dall'altra hai dei controlli web che visualizzano quei dati.

Non sono strettamente vincolati l'uno all'altro ma, per poter lavorare insieme, hanno bisogno di un'interfaccia, cioè un contratto che la classe sorgente presenta e che il controllo web accetta di rispettare.

Lavorando con i dati gerarchici esistono due tipi di contratto: l'IHierarchicalEnumerable e l'IHierarchicalDataSource. Gli sviluppatori dei controlli web possono scegliere se adeguarsi ad uno solo o a entrambi.
  • IHierarchicalEnumerable è un contratto molto semplice che, proprio come IEnumerable, promette di snocciolare gli elementi uno dopo l'altro, fornendo anche lo strumento per navigare l'albero in profondità.
    Se tu dovessi sviluppare un controllo web, queste condizioni ti soddisferebbero? Io direi che... dipende, magari sto scrivendo un controllo che si limita a presentare l'albero quindi sì, le premesse sono sufficienti a farmi svolgere il lavoro.
  • IHierarchicalDataSource è un contratto che offre condizioni diverse, infatti propone un accesso casuale ai nodi, più o meno come un IList. Vuol dire che fornendo un percorso del tipo /root/foglia, la sorgente dati mi permette di arrivare esattamente a quel nodo che avevo chiesto, senza doverli passare in rassegna uno alla volta.
    Se sto sviluppando un controllo web per riorganizzare i nodi dell'albero od eseguire comandi su di essi, allora questo contratto è più idoneo perché mi lascia agire in maniera puntuale.

Quando uno sviluppatore sceglie di attenersi all'uno o all'altro contratto (o ad entrambi), non gli è precluso di realizzare un templated control ma può fare le due scelte in maniera indipendente.

doppiomango ha scritto:

con IHierarchicalEnumerable non ho modo di utilizzarlo con dei controlli che gestiscano i button. Al contrario IHierarchicalDataSource controlli come il TreeView, che a sua volta permette invece l'utilizzo di button.
No, non c'è alcun nesso di causalità tra l'interfaccia e il supporto ai Button da parte del controllo.

Il controllo TreeView di ASP.NET non è un templated controls e quindi non puoi personalizzare il rendering del nodo inserendoci dentro dei Button. E' stata una libera scelta degli sviluppatori; non dobbiamo neanche andare ad indagare con quale/i delle due interfacce questi due controlli lavorino.

Invece, capita che Thomas Gerber, sviluppatore dell'OdcTreeView, abbia scelto di creare un templated control che, date le funzionalità che ha voluto implementare, può lavorare solo con una sorgente dati di tipo IHierarchicalDataSource.

doppiomango ha scritto:

Questo significa che sono legato a dei controlli con un markup non pienamente customizzabile...

No, grazie all'OdcTreeView hai già ampia libertà di movimento ma devi tenere presente che un minimo di markup di intelaiatura lui lo genera, come ad esempio la lista <ul> e gli elementi <li> annidati che gli servono a creare visivamente l'albero.
Dato che disponi del sorgente, potresti rendere personalizzabile anche questo aspetto.

doppiomango ha scritto:

In breve non posso usare lo stesso controllo creato nell'altra discussione.
Esatto. Nell'altra discussione usavamo il TreeView di ASP.NET perché volevamo semplicemente mostrare l'albero a video. Ora ti va stretto e dunque puoi provare l'OdcTreeView che si trova su CodeProject. Dato che richiede un IHierarchicalDataSource, bisogna implementarlo anche nella sorgente dati. Vedi il codice del progetto di esempio.

ciao
Modificato da BrightSoul il 22 luglio 2013 21.42 -

Enjoy learning and just keep making

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.