Ciao a tutti,
ho un problema con i databinding.
Questa è la situazione:
una query linq che popola una datagridview tramite databinding su una form. Sulla stessa form sono presenti altre griglie che visualizzano altre informazioni. Questa form DEVE ESSERE IN SOLA LETTURA, e le informazioni nelle diverse griglie devono essere editate ciascuna con una particolare finestra "figlia".
Sulla finestra figlia ho una copia della griglia della finestra "padre", sulla quale devo inserire/modificare/cancellare righe.
Ora, se io nella finestra padre scrivo per esempio:
dim f as new ChildForm
f.MyGridBindingSource.DataSource = Me.MyGridBindingSource.DataSource
f.ShowDialog
nella finestra figlia ho la mia griglia correttamente popolata, ma quando per esempio elimino una riga questa IMMEDIATAMENTE scompare anche dalla griglia nella finestra padre sottostante.
Ovviamente nella mia finestra figlia io devo avere i classici OK e ANNULLA che mi permettono di apportare tutte le modifiche necessarie per poi decidere se accettarle o no.
Il comportamento attuale penso derivi dal fatto che i due databinding di fatto fanno riferimento agli stessi dati, per cui modificandoli da una parte si modificano anche dall'altra.
Ho poi provato questo:
dim f as new ChildForm
f.MyGridBindingSource.DataSource = New List(Of MyType)(MyQueryResult.ToList)
f.ShowDialog
Questo, creando una copia dei dati, elimina il problema delle modifiche sulla form figlia propagate immadiatamente alla form padre.
Il problema adesso è che non so come integrare le variazioni effettuate nel datacontext.
Non esiste un metodo in LINQ che confronta una collezione con un'altra e le "sincronizza"? Ho visto per esempio il metodo "merge", ma mi pare che non gestisca le righe eliminate e quelle modificate, ma solo quelle aggiunte. E' corretto?
Qualcuno ha idea di come posso risolvere?
Grazie a tutti!