Ho una casella di controllo Winforms associata a una proprietà di un'entità Entity Framework.Il valore del database della casella di testo/casella di spunta non è corretto finché la casella di testo/casella di controllo non è convalidata
Così, per esempio, ho bindingSource.DataSource = myDog
con una casella di controllo legati alla proprietà IsSleeping
, in modo che quando l'utente controlla la casella, IsSleeping
diventa vero, e quando l'utente deseleziona la casella, IsSleeping
diventa falso.
Questo funziona correttamente. Il problema è che il valore di IsSleeping
non viene aggiornato fino a quando la casella di controllo non viene convalidata, che si verifica solo quando lo stato attivo sposta da dalla casella di controllo a qualcos'altro. Così, se voglio che accada qualcosa quando la casella è selezionata:
private void IsSleepingCheckbox_CheckedChanged(object sender, EventArgs e)
{
OnDogPropertyChanged(myDog);
MyAnimalEntities.SaveChanges();
}
myDog.IsSleeping
sarà ancora vero, fino a quando la casella di controllo del Validated
viene poi sollevato. Così, quando il povero myNaughtyKitty
(chi sta ascoltando l'evento DogPropertyChanged
) viene a mangiare fuori dal piatto di cibo myDog
pensando che myDog
stia dormendo, myDog
si sta proprio svegliando! Oh no!
Ancora peggio, MyAnimalEntities.SaveChanges()
non vede le modifiche al myDog
ancora, quindi il valore di IsSleeping
non è mai salvate nel database. Spostare la chiamata .SaveChanges()
a IsSleepingCheckbox_Validated
non risolve questo problema, perché se la casella di controllo è attivata ma il modulo viene chiuso senza mai spostare lo stato attivo da dalla casella di controllo, la casella di controllo non viene mai convalidata e quindi il suo stato non viene mai salvato!
Immagino che questo deve essere un problema abbastanza comune con l'associazione di dati e caselle di controllo/caselle di testo, e infatti ho trovato un sacco di post sull'argomento online, ma nessuno sembra mai avere una soluzione. Qualcuno è stato in grado di trovare una soluzione alternativa per questo?
Mi hai salvato la vita dopo ore di ricerca in google. Grazie. – superjugy