Newsgroup: it.comp.dotnet
Titolo: WPF datagrid

Ciao a tutti!
Dopo una giornata persa su questa *** di griglia credo di essere
arrivato al punto di aver sbagliato tutto.
Non posso e non voglio credere che occorrano settimane di studio per
poterla usare quindi è più probabile che io stia clamorosamente
sbagliandone l'uso magari essendo troppo legato ai vecchi oggetti di
VB6.
Quindi resetto cervello e progetto: cosa mi consigliate per poter
usare la griglia? Non intendo i 1000 tutorial che si trovano dove si
fa una griglia col Binding a una lista STATICA di 10 elementi e tutto
pare facile... io devo fare una "banale" griglia con dei dati (in
parte presi da una classe, in parte inseriti dall'utente), devo poter
accedere ai dati (sia della cella che l'utente modifica sia di altre
celle della stessa riga) e devo poter aggiungere/eliminare colonne
(oltre che a gestirne la disabilitazione a seconda del valore di altre
celle).
Grazie a priori,
un Al3x disperato!


Considerato che non vuoi i soli, tanti, tutorial, forse il discorso 
merita un discorso un po' più radicale.
Non so come hai provato ma come minimo hai bisogno di usare queste 
cose:
- i template sono vitali per dare una visualizzazione che vada al di là 
del mero testo. Ogni cella può essere complessa a piacere (occhio a non 
esagerare). Gli esempi classici sono celle di combobox, di immagini o 
di pulsanti.
- gli stili ti permettono di fare tante cose, tra tutte evidenzio 
l'applicazione dei trigger che permettono la dinamicità della UI in 
modo dichiarativo. In altre parole ti evitano tonnellate di codice
- I ValueConverter (tue classi che implementano IValueConverter) sono 
fondamentali per trasformare mono o bidirezionalmente i dati che vanno 
bindati ai controlli
- I Command sono le azioni che la tua view scatena verso lo strato 
sottostante.
Se non lo stai già facendo usa il pattern MVVM che sposta perfettamente 
WPF. MVVM Light è un ottimo toolkit se non vuoi scriverti codice da 
zero che è certamente molto oneroso.
Se usi MVVM:
- non usare eventi dei controlli verso il code behind
- usa i behavior al posto degli eventi
- fai il binding dell'intera view verso il viewmodel dove esponi 
proprietà di tipo ICommand
Se sai già di che parlo, allora fai una domanda più specifica, 
altrimenti ti consiglio di approfondire questi temi.
BTW, la listview mi è sempre stata più che sufficiente anche per le 
griglie più complesse. Premetto che non sono un grande fan delle grid 
perché le considero troppe volte il rifugio degli sviluppatori quando 
non sanno dove mettere i dati.
-- 
Raffaele Rialdi  
http://www.iamraf.net
Weblog: 
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile 
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET - 
http://www.ugidotnet.org/

Chiedo scusa a Al3x e mi introduco per fare una ulteriore domanda:
senza neanche valutare il componente standard, mi è stato chiesto dai 
"piani alti" della mia ditta di scegliere e comprare un componente 
datagrid di terze parti, in quanto spaventati dai tempi che ho impiegato 
per realizzare alcune modifiche alla ui che ricadevano su modifiche ai 
template che avevo realizzato ad hoc in precedenza.
Soprassedendo sulle mie probabilmente scarse capacità e sulla 
opportunità a livello di design della cosa, vi chiedo se qualcuno ha 
esperienza e qualche consiglio in tal senso, magari anche riguardo 
all'uso di tali componenti in ambito mvvm.
Io ho dato una rapida occhiata al mercato, ma mi è davvero difficile 
capire se riuscirò ad adattare i miei viewmodel a componenti che tutto 
mi sembrano fuorché "mvvm friendly"; forse ho guardato male (syncfusion, 
xceed, componentart, infragistix, telerik), ma ho molta paura 
soprattutto perché penso che in qualche modo perderò quel (pur poco) 
controllo sul codice che ho acquisito finora...
Spero in qualche modo che la domanda sia utile anche ad Al3x così non 
sarò stato troppo invadente :)
Ciao e grazie

 template che avevo realizzato ad hoc in precedenza.
Su questo punto, un interrogativo piu' che altro retorico: secondo
quale logica un componente di terze parti ti avrebbe consentito di
fare quelle modifiche in tempi minori?? O forse la logica e' che devi
trovare un componente di terze parti che faccia di tutto di piu',
anche il caffe', ma che si configura con sforzo poco o nullo, magari
con la bacchetta magica fornita in dotazione??
-LV


come scrivevo non sono un fan delle grid, non conosco quelle di terze 
parti, e comunque non vedo neppure la necessità di usare la datagrid 
considerato che a botte di template e stili la listview è già 
super-versatile.
Piuttosto domandati quanti accidenti tirerà l'utente finale a vedere 
tutto in griglia piuttosto che un'interfaccia più "ergonomica". Ovvio, 
dipende dai dati, ma tantissime volte si possono presentare in modo 
migliore che una mera tabella. WPF in questo caso ti aiuta.
Per farti un esempio concreto, guarda questo post che mostra il sistema 
solare usando una listbox:
http://bea.stollnitz.com/blog/?p=40


 con la bacchetta magica fornita in dotazione??
Come diceva Quelo, la seconda che hai detto.
(Avevo aggiunto un commento - non riferito a te - che essendo il 
newsgroup pubblico ho rimosso prima di premere "invia" :)

 migliore che una mera tabella. WPF in questo caso ti aiuta.
Grazie a te e a Ludovico Van per le risposte, più o meno sono 
considerazioni simili a quelle che ho fatto ai "piani alti", ma a quanto 
pare non sono stato convincente. Volete venire a farci una visitina? ;)

 convincente. Volete venire a farci una visitina? ;)
queste sono discussioni che ho fatto più volte con i "piani alti" dei 
miei clienti.
Le motivazioni più convincenti quelle fatte da cifre, e tra una UI 
usabile e una meno usabile le cifre sono ore di lavoro aka denaro ;)



In effetti l'idea di una cosa tipo l'A-Team dei programmatori, che
interviene a risolvere i conflitti e le ingiustizie in produzione, non
e' affatto male... :)
Piu' seriamente, condivido con Raffaele l'idea che per il management
quello che conta sono piu' che altro i denari: il problema e' che ne
sanno talmente poco di informatica e produzione che i conti che fanno
sono *sbagliati* e mai oltre che a brevissimo. Occorre quindi che il
programmatore impari lui a fare bene i conti, cosa tutt'altro che
semplice vista la complessita'/varieta'/dinamicita' della materia, ma
e' davvero l'unica via per potersi sedere a tavolino con i piani alti
e parlare l'unica lingua che in quella sede viene consentita...
Ovviamente estremizzo: quanto appena detto vale solo nel 99% dei
casi... ;)
-LV