Contesto
Recentemente ho scritto un esame finale che richiedeva l'utilizzo di un oggetto BindingSource con ADO.NET per popolare un numero di controlli combinati di caselle e etichette da cui l'utente poteva eseguire le funzioni aziendali di base. Ho funzionato, ma ho avuto alcune riserve sulla mia scelta di design.
L'impostazione
Quando un utente ha selezionato un prodotto dalla casella combinata, il binding ha aggiornato due etichette del costo e della quantità a portata di mano del prodotto. Quindi ho analizzato il costo decimale dalla proprietà Text dell'etichetta per passare a un modulo di acquisto.
Il problema
Inizialmente ho codificato un evento SelectedIndexChanged per il controllo della casella combinata e quindi ho richiamato un metodo per calcolare un totale di acquisto. Tuttavia, mi sono reso conto che stava prendendo il valore di testo prima dell'etichetta di costo il legame ha aggiornato il valore, lasciando un lag di indice (cioè il costo calcolato era per il prodotto selezionato in precedenza).
La mia correzione era di invocare il metodo di calcolo sull'evento TextChanged dell'etichetta di costo anziché dell'evento SelectedIndexChanged della casella combinata. Ha funzionato, ma ho sentito che ho compromesso un responsabile del design da qualche parte.
La mia domanda
Quale sarebbe un modo migliore per farlo? Riesco a vedere diverse possibili strade:
- L'origine dell'associazione può essere richiamata per aggiornare immediatamente i campi associati prima che venga invocato il metodo di calcolo?
- Devo decantare il valore del costo direttamente dall'origine dell'associazione utilizzando un ToRtraggio DataRowView analizzato invece di utilizzarlo da una funzionalità dell'interfaccia utente?
- C'è un modo migliore per ottenere valori da un'origine di associazione diversa dal precedente modo di cui non sono a conoscenza?
- Dovrei semplicemente fare a meno della fonte di binding e lavorare direttamente con l'oggetto DataTable?
Apprezza qualsiasi intuizione. Grazie!