[C#] Raggruppare dati in List<>

martedì 13 gennaio 2009 - 12.46

liveforever81 Profilo | Junior Member

Salve a tutti.

Ho un oggetto che è possibile rappresentare come una sorta di DataTable.

Ho usato il metodo Sort() in modo da raggruppare logicamente i dati in esso contenuti, classificandoli mediante il nome di una colonna.

Vorrei ora creare una Lista che raggruppi tali oggetti (items).

Esempio:
ecco una schematizzazione del mio datatable (già ordinato secondo la colonna 4):

colonna1 colonna2 colonna3 colonna4
qualcosa qualcosa qualcosa paperoga
qualcosa qualcosa qualcosa paperoga
qualcosa qualcosa qualcosa paperoga
qualcosa qualcosa qualcosa pippo
qualcosa qualcosa qualcosa pippo
qualcosa qualcosa qualcosa pluto

Vorrei creare una lista del tipo List<colonna4> in cui la prima contiene le prime 3 righe, la seconda le altre 2 ed infine la terza l'ultima.

come poter fare?
Grazie

rossimarko Profilo | Guru

Ciao,

il tuo oggetto è una classe o una datatable?

Se è una classe ha 4 proprietà (Colonna1, Colonna2, Colonna3, Colonna4) ?

Che framework stai usando?

-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

liveforever81 Profilo | Junior Member

Ciao Marco!

Il mio oggetto è una classe di tipo Worklist: una sorta di DataTable composto da una serie di righe (detti items) e colonne;

Ciò che sto facendo è questo:

Ho ordinato tale mia worklist in modo da avere items simili raggruppati (raggruppati secondo la colonna4, chiamiamola "ProcessName", i cui valori spesso si ripetono nei vari items).

Ora devo creare un controllo web che mi visualizzi tale worklist in questo modo:
A video mostro solo il primo item con quel process name (e di seguito tutti gli altri);
Creo un javascript che, mediante la pressione di un bottone, apra la lista di tutti gli items aventi il ProcessName uguale a quello del primo (l'header).

La List<> mi serve proprio per raggruppare items simili e poi visualizzarli.

Ora però stavo cambiando idea: avevo pensato di usare un Dictionary in cui la chiave è la stringa ProcessName ed il valore proprio quello della worklist (costituita da tutti gli item aventi quel processName) o una Lista di Worklist items.

Che ne pensi?


***UPDATE: ho questo problema:
A questo metodo che crea tale dictionary passo solo il processName.
Come poter terminare l'aggiunta di worklist item al dictionary non appena il processName dell'item considerato risulta differente da quello in input?

rossimarko Profilo | Guru

Se usi il framework 3.5 per fare le group by puoi usare linq. Qui trovi alcuni esempi: http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

Se invece usi il framework 2 allora ti consiglio di fare una classe che raggruppa gli item e ha come figli gli oggetti con il dettaglio.

Esempio:
- ClasseFiglio
-Property: Colonna1
-Property: Colonna2
-Property: Colonna3
-Property: Colonna4

- ClasseGroupBy:
- Property: Nome Da Visualizzare
- Property: List<ClasseFiglio>

Creando poi una list<ClasseGroupBy> o una Dictionary (a seconda di quello che ti risulta più comodo) potrai accedere automaticamente anche ai suoi figli.


-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5