Problem: BindingSource.FIND funktioniert nicht, wenn Tabelle sich ändert

VB DOT NET, ab Visual Studio VS2005

Problem: Diese paar Zeilen ergeben Datenchaos, wenn sich die der BindingSource zugrunde liegende Liste ändert:

—————————————
dim SuchIndex as integer = -1
SuchIndex = Form1.BindingSource1.Find(“ArtNr”, Artikel)
if (SuchIndex > -1) {

Form1.BindingSource1.Position = SuchIndex
advStamm = CType(Form1.BindingSource1.Current, DataRowView)

…. verarbeite Datensatz advStamm, Mengen addieren etc ….

}

—————————————

Alles funktioniert super, solange die Liste der BindingSource nach ArtNr sortiert ist.

Ist die Liste aber z.B. nach Menge sortiert und wird beim Verarbeiten eben diese Menge geändert, so kann sich auch die Reihenfolge des Datensatzes in der Liste ändern. Das bekommt bindingsource.find aber nicht mit – und liefert fleissig den alten SuchIndex Wert zurück. Kurzum: advStamm enthält NICHT den Datensatz mit der gesuchten ArtikelNummer! Wenn der nachfolgende Code dass nicht abprüft gibt es dramatischen Datensalat!

Einache Abhilfe des Problemes, bevor man sich eine eigene BindingSource.Find Methode bastelt:

With Form1.BindingSource1
.Sort = “ArtNr”
End With

an den Anfang setzen. Unbedingt sicherstellen, dass sich die Sortierung der Liste innerhalb der Verarbeitung nicht ändert!

 

 

Schreibe einen Kommentar