ADO.NET - È meglio gestire una casella combinata o un evento etichetta e da dove dovrebbero provenire i dati?

2

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!

    
posta Skannen 26.06.2016 - 07:19
fonte

1 risposta

3

Should I just dispense with the binding source and work with the DataTable object directly

Questo almeno basterà a risolvere il tuo intero problema. Utilizza le tue etichette dell'interfaccia utente per visualizzare cose solo , non per fornire valori di input per ulteriori calcoli. Cosa faresti, ad esempio, se ti viene richiesto di modificare la formattazione dell'etichetta di costo, a, diciamo valori arrotondati a 1 decimale, ma il calcolo dei costi deve ancora occuparsi di 2 decimali?

Nel tuo caso è probabilmente possibile non utilizzare l'evento SelectedIndexChanged di uno dei tuoi controlli dell'interfaccia utente, ma utilizzare l'evento CurrentChanged di BindingSource e ottenere il valore di costo da Current proprietà di BindingSource (non è necessario analizzare alcun risultato "ToString ()" qui). In questo modo, puoi ottenere i valori e eseguire qualsiasi calcolo che desideri senza interferire con i controlli dell'interfaccia utente.

    
risposta data 26.06.2016 - 09:01
fonte

Leggi altre domande sui tag