Newsgroup: it.comp.lang.visual-basic
Titolo: [.NET] Scelta della Collection.

Ciao a tutti,
sto approfondendo un pochino, come da titolo.
Avendo le mie "classi base" dei dati, credo doverosamente di poter sfruttare la tipizzazione forte dei Generics (Of T), ad es. per essere rappresentati in ina ListBox.
Mi trovo nel tipico scenario della rappresentazione delle tuple di una tabella. Questo avverrà in seguito tramite WPF, ma non è lì il dubbio.
Partendo dal presupposto che per WPF "so" essere un buon punto di partenza utilizzare le ObservableCollection (Of T).
A parte WPF, quali classi scegliereste per rappresentare questi righe, soggette ad operazioni CRUD e di ordinamento?
Insomma, qualsiasi considerazione sarà gradita.
Grazie.
 
P.S.
non ho scritto WPF perchè non è strettamente legato ad esso, ma anche perchè altrimenti cliccava solo Mauro :P

Visto che ci siamo, perchè non mi è consentito di fare:
 
        Dim tabella As List(Of Magazzino) = Magazzino.ToList 
        Dim tabella1 As CollectionViewSource = CType(tabella, CollectionViewSource)
 

Per la conversione, credo sia importante precisare che "Magazzino" è una classe creata da EF, quindi di tipo "DbSet".

 soggette ad operazioni CRUD e di ordinamento?
 
una qualsiasi List(Of T) fa quello che deve fare come lista, ma non 
capisco che vantaggi vorresti avere in termini di CRUD e ordinamento, 
dove le vuoi utilizzare queste collection?
In quale strato dell'applicazione?
 
.m
 
-- 
blog @ //
milestone.topics.it
 
 
 

 
Ciao Mauro,
per cominciare vorrei usarla per popolare una ListView che presenterà i dati all'utente. Questa lista dovrà poter essere filtrata e ordinata per consentire delle ricerche nel magazzino.
Selezionando i singoli item, che mostrano solo i dati essenziali, ho messo in binding una finestra che espande tutte le proprietà del record. Da questo finestra consentirò la modifica delle proprietà e l'aggiunta/modifica/eliminazione degli stessi.
Grazie!

 l'aggiunta/modifica/eliminazione degli stessi.
 
ok, questa è prassi.


 certo modo.
Ecco, stanotte stavo proprio studiando il concetto di _vista_, ovvero quale vantaggio offra in più all'utilizzo delle sopracitate. Possiamo quindi dire che  nel codice business utilizzo le "List (Of T)", mentre per le view, quindi lato utente, offro i dati prodotti dalle suddette, ad una "vista" ordinabile- raggruppabile-filtrabile, dall'utente.
Grazie infinite Mauro, mi hai dato una conferma importantissima ;-)

 ordinabile- raggruppabile-filtrabile, dall'utente.
 
esatto, inoltre le viste, come ad esempio la _mia_ implementazione di 
IBindingListView, ti permettono di aggiungere il concetto di "proprietà 
calcolata" che spesso serve solo a livello di presentation.


Per prendere confidenza con la ObservableCollection, ho creato la seguente classe:
http://pastebin.com/Zz2tyqMn
 
 
- Facendo dei tests, scopro che possiede già una proprietà count, ereditata. Se però vado a rappresentare la stessa nella console, mi restituisce zero. Controllando nel debug, ho verificato che carica correttamente gli oggetti nella collezione e il numero è corretto.
- Quando utilizzo questa classe, istanzio l'oggetto e invoco la funzione LoadArticoli. E' corretto rendere possiibile questa azione, o dovrebbe avvenire in automatico alla creazione dell'oggetto? Ho provato ad inserire nel costruttore la chiamata alla funzione, ma risponde "Eccezione non gestita di tipo 'System.StackOverflowException'". Perchè non va bene?
 
Grazie!
 
F.

> - Facendo dei tests, scopro che possiede già una proprietà count, ereditata. Se però vado a rappresentare la stessa nella console, mi restituisce zero. Controllando nel debug, ho verificato che carica correttamente gli oggetti nella collezione e il numero è corretto.
Che non corrisponde al numero degli oggetti nella collezione, l'ho capito, ma alloca cosa "count" dovrebbe contare?!
Devo esporre io una proprietà che rappresenti il count della collezione? Mi parrebbe strano.

 
http://pastebin.com/Zz2tyqMn
 
 
permettimi di dirti che ï¿œ teribbbbile... :-|
fammi un esempio di come useresti quella strana cosa.


Ciao Mauro,
meno male che è terribile, dato che mi pareva un pochino astrusa.
Ho preso un esempio di un tuo amico:
http://community.visual-basic.it/alessandro/archive/2010/06/10/29532.aspx
 
Ovvio che avrò interpretato male io.
Mi faresti una grande cortesia se mi chiarissi un po'.

 Mi faresti una grande cortesia se mi chiarissi un po'.
 
manca una cosa fondamentale nella tua: "Shared" :-)


> manca una cosa fondamentale nella tua: "Shared" :-)
Avevo provato a toglierlo, perchè con il membro condiviso, non posso invocare la funzione. Aggiungendo lo "Shared" non è teribbbbile?!
Posso continuare i miei esperimenti così? I risultati non cambiano, allo stato attuale.

 stato attuale.
 
Fammi vedere come usi la tua versione e come usi la versione con lo 
shared.


 Posso continuare i miei esperimenti così? I risultati non cambiano, allo stato attuale.
Mi è saltato un periodo.
Volevo scrivere che questo l'ho corretto ora.

Ho capito, corretto e funziona :-)
Rimane cmq una schifezza?

 Fammi vedere come usi la tua versione e come usi la versione con lo 
Nel frattempo ho capito perchè sbagliavo.
Ora invoco la classe direttamente:
        Console.WriteLine(Articoli.LoadArticoli.Count)

Ciao Fabrizio,
 
You wrote on 26/12/2012 :

anche qui evidenzi un problema concettual di fondo, grave.
Quel codice scritto così, funziona, ma funziona solo una volta, ed è 
sbagliato.


 sbagliato.
Approfondirò, grazie.
 
F.

 Console.WriteLine(Articoli.LoadArticoli.Count)
 
Funzionare funziona, l'inghippo è: e se vuoi aggiungere un elemento che 
fai?
 
Articoli.LoadArticoli.Add( ... ) ?
 
perché in questo caso creresti un'altra collezione nuovamente, ergo 
devi prenderti una reference alla collezione creata e usare _sempre_ 
quella:
 
Dim data as Articoli
data = Articoli.LoadArticoli()
 
data.Count 'questo dovrebbe essre il valore iniziale
daa.Add( ... )
data.Count 'questo è il valore aggiornato dopo l'aggiunta.
