Domanda

La TreeView è un bel modo per presentare una gerarchia per gli utenti, ma immaginare il seguente scenario con la gerarchia illustrato di seguito:

Building 1 
 -Tenant 1
   - Payment 1
   - Payment 2
Building 2
 -Tenant 1
   - Payment 1
 -Tenant 2
   - Payment 1
   - Payment 2

in cui è necessario fare un inserto a un database quando l'utente fa clic sul nodo di pagamento. Essenzialmente le variabili necessarie per l'inserto sono BUILDING_ID, Tenant_Id, Payment_Id. Un modo per assemblare questi è quello di raggiungere a piedi la madre di ogni nodo:

Building_Id = Payment.ParentNode.ParentNode.Id

E 'meglio per memorizzare tutti i valori delle id sul nodo di pagamento nel formato seguente, quindi analizzare i valori per BUILDING_ID, Tenant_Id, Payment_Id? Ad esempio:

Payment.Value = "1|2|1"
È stato utile?

Soluzione

Trovo il modo migliore per gestire i dati aggiuntivi è quello di sottoclasse TreeNode. Creo una classe BaseNode che contiene i dati condivisi voglio mantenere, e di ereditare più lontano dalla che per ogni tipi di nodo specifici.

Il valore di sottoclassi è che si può mantenere forti i tipi di dati e tipi di dati complessi come qualsiasi altra classe ... che evita le matrici di hacking in una stringa con separatori di tubi e simili.

Una volta che avete i nodi nel posto che permette la stessa passeggiata albero si propone, solo che adesso si sta tirando i valori da (diciamo) BaseNode.MyData (che tutti i sottotipi erediteranno).

Una cosa da guardare per se si fa questo, però: è necessario capire come autorevole si desidera che questi nodi siano. Nel mio caso, quando l'utente si sposta l'albero controlliamo con una cache del database per garantire non abbiamo bisogno di ripopolare i dati.

Altri suggerimenti

Se la TreeNodes del controllo TreeView ha una proprietà Tag che contiene un oggetto, è possibile associare un oggetto personalizzato contenente queste proprietà desiderate con tag di ogni TreeNode, allora si può accedervi, se necessario.

Per esempio, in .Net a partire dal 4.5, sarebbe in questo modo:

myTreeNode.Tag = myObject;

Dove myTreeNode è un'istanza di TreeNode e myObject è un'istanza dell'oggetto personalizzato definito che contiene i dati che si desidera sia associato un TreeNode del vostro TreeView.

Ecco un articolo su MSDN sulla proprietà TreeNode.Tag: MSDN -. TreeNode.Tag Proprietà

Si potrebbe prendere in considerazione ulteriori e, invece di sottoclassi della TreeNode l'idea di Godeke, legare i nodi di una raccolta oggetto di business - l'archiviazione dei dati locali nelle proprietà dei figli di raccolta. La logica collezione sarà in grado di darvi i dati necessari e ottenere i benefici di separare i dati e la logica del livello di presentazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top