Hallo.
Ich habe eine Datatable mit einer ID-Spalte (Autoincrement, Primärschlüssel, Unique) erstellt, in welcher ich verschiedene Messwerte speicher. Das Funktioniert auch ganz gut, allerdings wird bei jedem aufrufen der Funktion eine neue Zeile und damit auch eine neue ID angelegt. Das ist an sich super und gewollt. Es sollen jedoch nur Messwerte gespeichert werden, wenn die jeweilige Checkbox markiert ist. Ansonsten werden die Änderungen am Ende verworfen. Beim nächsten Aufrufen der Funktion wird dann trotz .RejectChanges() die ID um eins weiter erhöht. Wenn ich das Programm starte und erst nach ein paar minuten die Aufzeichnung beginne, steht die ID dann bereits bei weit über 100 in der ersten Zeile.
Die Funktion wird öfter aufgerufen, da alle Label durch Geräteevents, welche beim abrufen der jeweiligen Messwerte feuern, mit aktuallisiert werden.
Hier mal eine vereinfache Darstellung was ich mache:
Das ganze ist bisher nur ein "Schönheitsmanko". Gibt es eventuell eine Funktion welche die ID-Spalte beim Löschen der letzten Zeile mit zurücksetzt? Oder kann ich eine Zeile erstellen und füllen ohne das bereits bei der Erstellung die ID hochgezählt wird? Also das die ID erst geschrieben wird wenn ein .AcceptChanges() folgt?
Ich habe eine Datatable mit einer ID-Spalte (Autoincrement, Primärschlüssel, Unique) erstellt, in welcher ich verschiedene Messwerte speicher. Das Funktioniert auch ganz gut, allerdings wird bei jedem aufrufen der Funktion eine neue Zeile und damit auch eine neue ID angelegt. Das ist an sich super und gewollt. Es sollen jedoch nur Messwerte gespeichert werden, wenn die jeweilige Checkbox markiert ist. Ansonsten werden die Änderungen am Ende verworfen. Beim nächsten Aufrufen der Funktion wird dann trotz .RejectChanges() die ID um eins weiter erhöht. Wenn ich das Programm starte und erst nach ein paar minuten die Aufzeichnung beginne, steht die ID dann bereits bei weit über 100 in der ersten Zeile.
Die Funktion wird öfter aufgerufen, da alle Label durch Geräteevents, welche beim abrufen der jeweiligen Messwerte feuern, mit aktuallisiert werden.
Hier mal eine vereinfache Darstellung was ich mache:
VB.NET-Quellcode
- Dim MessZeile As DS_Values.Dt_AlleMesswerteRow = DS_Save_Values.Dt_AlleMesswerte.NewDt_AlleMesswerteRow
- With MessZeile
- .Time = CDate(DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss.ff"))
- .T_Ist = MyTemperature.Istwert 'Wert wird von Gerät ausgelesen, ein Event aus der jeweiligen Geräteklasse aktuallisiert dann alle Labels entsprechend
- end with
- If Chbx_Aufzeichnung.Checked Then 'nur Speichern wenn Checkbox angekreuzt
- DS_Save_Values.Dt_AlleMesswerte.AddDt_AlleMesswerteRow(MessZeile)
- DS_Save_Values.AcceptChanges()
- Chrt_Messwerte.DataBind()
- Chbx_Aktuell.Checked = Not Chbx_Aktuell.Checked
- Else
- MessZeile.Delete()
- DS_Save_Values.Dt_AlleMesswerte.RejectChanges()
- End If
Das ganze ist bisher nur ein "Schönheitsmanko". Gibt es eventuell eine Funktion welche die ID-Spalte beim Löschen der letzten Zeile mit zurücksetzt? Oder kann ich eine Zeile erstellen und füllen ohne das bereits bei der Erstellung die ID hochgezählt wird? Also das die ID erst geschrieben wird wenn ein .AcceptChanges() folgt?