Frage

Okay, große Gehirne hier ist etwas, das eher eine Herausforderung als eine Anforderung darstellt. Ich bin ein bisschen verblüfft. Normalerweise brauche ich nur einen Prod in die richtige Richtung, also machen Sie Ihre Stößen bereit.

Ich habe eine Tabcontrol in Textboxen. Ich möchte eine Überprüfung des Inhalts aller Textboxen während des ausgewählten Ereignisses auf einer Liste auf demselben Formular durchführen. Wenn eines der Textboxen Daten von einer DataTable -Zeile unterscheidet - die durch das Element "ListView" dargestellt wird, möchte ich, dass der Benutzer die gerade vorgenommene Änderung beibehalten möchte. Wenn sich nichts geändert hat, möchte ich, dass es nur die Auswahl ändert.

Offensichtlich vergleiche ich den Inhalt der Textfelder mit den zugehörigen Spalten im Datarow.

Ich konnte den Scheck nur brutal erzwingen und jeweils jedes einzelne Scheck durchführen. Ich würde es vorziehen, eine clevere algorithmische Methode zum Radfahren durch die Tabcontrol -Textboxen zu finden und die Werte mit den Spaltenwerten zu überprüfen.

Irgendwelche Vorschläge?

Bearbeiten: Ich mag die Lösung "clever genannte Textboxen" unten am besten, obwohl beide gut sind. Wenn in den nächsten 14 Tagen niemand eine bessere Idee hat, bekommt die Antwort des Textfelds das Grün.

War es hilfreich?

Lösung

Geben Sie den Textboxen einen cleveren Namen an, wie in einem Teil des Namens der Spalten-/Zeilenname ist.

Gruppieren Sie das Textfeld steuert eine Schleife durch sie. Holen Sie sich für jede Steuerung den Namen (Teil) und verwenden Sie ihn als Verweis auf Ihr DataTable. Überprüfen Sie die Werte.

Andere Tipps

Wenn ich Sie richtig verstehe, möchten Sie es vermeiden, jede Textbox für jede Änderung zu vergleichen, um nur die geänderten Textboxen zu überprüfen, die durch das ausgewählte Ereignis des ListView -Steuerelements angesteuert werden. Ist das richtig?

Nun, DataSarows und DataTables haben bereits Zeilenversioning und Rollbacks implementiert. Wenn Sie also die Textfelder an die zugrunde liegende Zeile binden (entweder indem Sie Ereignisse schreiben, um den Fokus für Änderungen/Verlieren zu schreiben oder einen automatisierten Mechanismus zu verwenden, um dieselbe Aufgabe zu erfüllen), Überprüfen Sie dann die RowState -Eigenschaft unter SelectedIndExchanged. Wenn der RowState etwas anderes als unverändert ist, fordern Sie den Benutzer zum Speichern auf. Wenn er spart, begehen Sie die Änderungen, sonst lehnen Sie sie ab.

Sie möchten also beispielsweise so etwas in Ihrem ausgewählten Ereignishandler:

if (row.RowState == DataRowState.Modified) {
  // prompt for user input
  if (promptResult == PromptResult.Save) {
    row.AcceptChanges();
  }
  else {
    row.RejectChanges();
  }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top