Hallo alle zusammen,
ich habe ein kleines Speicherproblem.
Also ich arbeite mit bindingsource (BS) und Tableadapter.
Meine Speicherprozedur ist auch trivial.
Aber nun kommt es. Ich setze in meiner Form einen Errorprovider ein, um numerische Felder zu prüfen.
Wenn ich in meiner Maske alle Felder korrekt eingebe oder Sie leer lasse wird mein Datensatz korrekt gespeichert. Dazu muss ich sagen, dass ich die ID immer per Code setze und so auch ein leerer DS nur mit ID gespeichert werden kann.
Provoziere ich den Errorprovider
1.->fehlerhafte Eingabe -> Fehler wird angezeigt
2.Feld =korrekte Eingabe
3. -> Feld leeren (markieren + Entfernen)
4. Speichern Datensatz (DS)
In diesem Fall ist mein dt1 aus Getchanges => nothing. Und somit wird mein DS nicht gespeichert.
Gehe ich nun auf einen neuen Datensatz (ohne die Maske zu verlassen!) und mache alles fein und gehe dann wieder auf speichern,
bekomme ich prompt 2 Datensätze geliefert (Eben zusätzlich den eben noch fehlenden DS).
Hat einer eine Idee? Ich bin echt verzweifelt.
ich habe ein kleines Speicherproblem.
Also ich arbeite mit bindingsource (BS) und Tableadapter.
Code:
Dim cmb As DbCommandBuilder = New SqlCommandBuilder cmb.DataAdapter = Me.MyTable.Adapter Me.MyTable.Connection = con Me.MyTable.Fill(Me.MyDataset.MyTable)
Code:
Me.BS.EndEdit() Dim dt1 As DataTable = Me.MyDataset.MyTable.GetChanges Try If dt1 IsNot Nothing Then If save_flag = 1 Then antwort = MsgBox("Wollen Sie die Änderungen speichern?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Sicherheitsabfrage") Else antwort = MsgBoxResult.Yes End If If antwort = MsgBoxResult.Yes Then Me.MyTable.Connection = con Me.MyTable.Update(MyDataset) 'Me.MyTDataset.AcceptChanges() Else Me.MyDataset.RejectChanges() End If Return True End If save_detail = True Catch ex As Exception MsgBox("Fehler: " & Err.Number & " " & Err.Description, MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Kritischer Fehler") Me.MyDataset.RejectChanges() Return False End Try
Code:
Private Function check_number(ByVal indat As Control, Optional ByVal typ As String = "") Try If indat.Text = "" Or indat.Text = String.Empty Then Me.ErrProvider.SetError(indat, "") Exit Function End If If IsNumeric(indat.Text) = True Then Me.ErrProvider.SetError(indat, "") Else Me.ErrProvider.SetError(indat, "Das ist keine gültige Zahl!") Exit Function End If If InStr(indat.Text, ".") Then Me.ErrProvider.SetError(indat, "Bitte geben Sie Dezimalzahlen mit Komma ein!") indat.Select() Exit Function End If If typ = "int" And InStr(indat.Text, ",") Then Me.ErrProvider.SetError(indat, "Sie müssen eine ganze Zahl eingeben!") indat.Select() Exit Function End If Me.ErrProvider.SetError(indat, "") Catch ex As Exception Msgbox ("Fehler...") End If End Try End Function
Provoziere ich den Errorprovider
1.->fehlerhafte Eingabe -> Fehler wird angezeigt
2.Feld =korrekte Eingabe
3. -> Feld leeren (markieren + Entfernen)
4. Speichern Datensatz (DS)
In diesem Fall ist mein dt1 aus Getchanges => nothing. Und somit wird mein DS nicht gespeichert.
Gehe ich nun auf einen neuen Datensatz (ohne die Maske zu verlassen!) und mache alles fein und gehe dann wieder auf speichern,
bekomme ich prompt 2 Datensätze geliefert (Eben zusätzlich den eben noch fehlenden DS).
Hat einer eine Idee? Ich bin echt verzweifelt.
Comment