Zum Inhalt springen

[VB2005] BindingSource.EndEdit() "vergisst" Änderungen


Iceman346

Empfohlene Beiträge

Folgendes Problem: Ich habe eine Tabelle in einer Datenbank welche eine Spalte "intPosition" besitzt. Diese nutze ich um den Inhalt der Tabelle bei der Ausgabe in einer bestimmten Reihenfolge zu sortieren.

Die Tabelle ist über eine BindingSource in das VB2005 Programm eingebunden. Im Programm habe ich eine DataGridView, die über eine Abfrage der Datenbank gefüllt wird. In dieser Abfrage ist die Sortierung über die Position enthalten.

Über das GUI des Programmes möchte ich nun die üblichen Knöpfe zum Verändern der Reihenfolge zur Verfügung stellen, also die Möglichkeit einen Eintrag nach oben und unten zu verschieben bzw. diesen an den Anfang bzw. ans Ende der Ausgabe zu stellen. Beim Drücken eines der Knöpfe soll also die Positionsspalte der Tabelle überarbeitet werden, so dass die Änderung dann entsprechend umgesetzt ist.

Meine Vorgehensweise war nun folgendermaßen:

- Ich hole mir die Position der vom User markierten Zeile

- Ich gehe sämtliche Einträge der Binding Source durch und bearbeite die Position jedes Eintrags falls nötig

- Ich rufe die EndEdit() Funktion der BindingSource auf, welche die Änderungen in das DataSet übernehmen sollte

- Mit TableAdapter.Update schreibe ich die Änderungen in die Datenbank

- Über das TableAdapter.Fill der Abfrage lese ich die Einträge neu ein und dementsprechend ändert sich der Inhalt der DataGridView

Als Beispiel mein Code um den Eintrag an die erste Position zu stellen:

If sender.Equals(ButtonFirst) Then

            If pos > 1 Then

                For i As Integer = 0 To TabBearbBindingSource.Count - 1

                    If TabBearbBindingSource.Item(i)("intPosition") < pos Then

                        TabBearbBindingSource.Item(i)("intPosition") = TabBearbBindingSource.Item(i)("intPosition") + 1

                    ElseIf TabBearbBindingSource.Item(i)("intPosition") = pos Then

                        TabBearbBindingSource.Item(i)("intPosition") = 1

                    End If

                Next


                Dim Msgboxstring = ""

                For i As Integer = 0 To TabBearbBindingSource.Count - 1

                    Msgboxstring = Msgboxstring & "i: " & i & " Position: " & TabBearbBindingSource.Item(i)("intPosition") & " DauerStunden: " & TabBearbBindingSource.Item(i)("dblDauerStunden") & vbNewLine

                Next


                MsgBox(Msgboxstring)


                TabBearbBindingSource.EndEdit()

                TabBearbTableAdapter.Update(SpeicherDataSet.tabBearb)

                Me.QryMasterTableAdapter.Fill(Me.SpeicherDataSet.qryMaster)

            End If

In pos ist dabei die Anfangsposition der ausgewählten Zeile gespeichert. Im Endeffekt schaue ich also ob die Position des i-ten Eintrags kleiner ist als die Anfangsposition, erhöhe die Position um 1 falls ja und setze die Position des markierten Eintrags auf 1.

In der MsgBox die ich darunter ausgeben lasse ist auch alles in Ordnung, wenn ich nach Ende des Ablaufs aber in meine Datenbank hinein schaue ist dort der letzte Eintrag nicht angepasst, die markierte Zeile hat also keinen neuen intPosition Eintrag bekommen, obwohl dieser in der BindingSource geändert wurde.

Auswirkungen also quasi bildlich dargestellt:

Eintrag1 -> Position 1

Eintrag2 -> Position 2

Dann soll Eintrag2 nach ganz oben verschoben werden

Ausgabe in der MsgBox:

Eintrag1 -> Position 2

Eintrag2 -> Position 1

Eintrag in der Tabelle:

Eintrag1 -> Position 2

Eintrag2 -> Position 2

Außer das die EndEdit Funktion irgendwie buggy ist hab ich momentan absolut keine Erklärung für das Verhalten. Hat jemand sich schonmal mit sowas beschäftigt und kann mir sagen ob ich irgendwas falsch gemacht habe?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab jetzt als Workaround die Tabelle im DataSet direkt editiert, dann funktioniert alles. Ist natürlich nicht so schön, da ich jetzt bei jedem Tastendruck die kompletten Einträge der Tabelle durchlaufe, da das DataSet nicht filterbar ist.

Muss mal schauen wie sich das auswirkt wenn das Programm in Benutzung ist und die Datenbank etwas angewachsen ist. Falls irgendwer ne Lösung mit der BindingSource hat bin ich natürlich immer noch für Hinweise dankbar.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Lösung hab ich keine, aber das gleiche Problem:

Ich arbeite an einem Projekt, in dem ich eine Access-DB mit zwei Tabellen verwende. Auf einer Form habe ich die möglichkeit erstellt, über diverse Textfelder, Comboboxen, DateTimePicker und Checkboxen bestehende Einträger zu editieren, die habe ich über je eine Datasource pro Tablle an die entsprechende Tabelle im DataSet angehängt.

Abfragemäßig funktioniert auch alles, also das Bereitstellen der vorhandenen Einträge und so, allerdings wird mein DataSet nicht Upgedatet.

Ich hab hier mal die entsprechenden zeilen Code hoch gestellt. anzahlp und anzahld speichern mir die Rückmeldung der DataSet.Update, damit ich eine kontrolle habe.


int anzahlp,anzahld = 0;

persönlichBindingSource.EndEdit();

dienstlichBindingSource.EndEdit();


anzahlp = persönlichTableAdapter.Update(feuerwehrverwaltungaccess2000DataSet.persönlich);


MessageBox.Show(anzahlp.ToString());


anzahld=dienstlichTableAdapter.Update(feuerwehrverwaltungaccess2000DataSet.dienstlich);


MessageBox.Show(Convert.ToString(anzahld));

Wäre eine große Hilfe, wenn ihr mir sagen könntet, woran das liegen kann. Das DataSet verwende ich auch auf mehreren anderen Forms, allerdings bis jetzt nur zur Abfrage.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...