Controllo di due dozzine di valori, caselle di testo contro colonne di dati, in modo algoritmico

StackOverflow https://stackoverflow.com/questions/606378

Domanda

Va ??bene il cervello grande, ecco qualcosa che è più una sfida che un requisito. Sono un po 'perplesso. Di solito ho solo bisogno di un pungolo nella giusta direzione, quindi prepara i tuoi bastoncini.

Ho un tabcontrol coperto in caselle di testo. Voglio eseguire un controllo del contenuto di tutte le caselle di testo durante l'evento SelectedIndexChanged su una visualizzazione elenco nello stesso modulo. Se una delle caselle di testo ha dati diversi da una riga DataTable - rappresentata dall'elemento ListView - Voglio che gli venga chiesto se l'utente desidera mantenere la modifica che ha appena apportato. Se non è cambiato nulla, voglio solo che cambi la selezione.

Quindi ovviamente sto confrontando il contenuto delle caselle di testo con le colonne associate nel datarow.

Potrei solo forzare il controllo forzato e fare ogni singolo controllo uno alla volta. Preferirei trovare un modo algoritmico intelligente per scorrere le caselle di testo di tabcontrol e verificare i valori rispetto ai valori colonnari.

Qualche suggerimento?

EDIT: mi piacciono le caselle di testo "abilmente chiamate" soluzione al di sotto migliore, sebbene entrambi siano buoni. Se nessun altro ha un'idea migliore nei prossimi 14 giorni, la risposta nella casella di testo diventa verde.

È stato utile?

Soluzione

Assegna un nome intelligente alle caselle di testo poiché in una parte del nome è presente il nome della colonna / riga.

Raggruppa la casella di testo controlla un loop attraverso di essi. Per ogni controllo, ottieni il nome (porzione) e usalo come riferimento al tuo datatable. Controlla i valori.

Altri suggerimenti

Se ti sto capendo bene, vuoi evitare di confrontare ogni casella di testo su ogni modifica, a favore del solo controllo delle caselle di testo che sono modificate, guidate dall'evento SelectedIndexChanged del controllo ListView. Esatto?

Bene, DataRows e DataTables hanno già implementato il controllo delle versioni delle righe e dei rollback, quindi se si associano le caselle di testo alla riga sottostante (o scrivendo eventi per riscrivere il cambio / perdere lo stato attivo o utilizzando un meccanismo automatico per ottenere lo stesso attività), quindi controllare la proprietà RowState su SelectedIndexChanged. Se RowState è diverso da invariato, richiedere all'utente di salvare. Se salva, effettua il commit delle modifiche, altrimenti respingile.

Quindi, ad esempio, vorresti qualcosa del genere nel gestore dell'evento SelectedIndexChanged:

if (row.RowState == DataRowState.Modified) {
  // prompt for user input
  if (promptResult == PromptResult.Save) {
    row.AcceptChanges();
  }
  else {
    row.RejectChanges();
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top