Hallo Leute!<BR>Kann mir vieleicht jemand helfen?<BR>Ich zeige in einem Data Grid die Daten aus meiner Datenbank (Access)an.<BR>Nun möchte ich gerne den Datensatz per Button-Click löschen der zuvor blau markiert wurde.<BR>Ich bekomme das leider nicht hin.<BR>Geht das denn? Und wenn nicht, könnt ihr mir eine andere Methode nennen?<BR>Vielen Dank im Vorraus!!!!<BR>Tatjana
Announcement
Collapse
No announcement yet.
Datensatz löschen
Collapse
X
-
Hallo,
das folgende Beispiel demonstriert einen möglichen Weg:
<pre>
Dim aCM As CurrencyManager
Const cTBLNAME As String = "TESTTABELLE"
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.OleDbDataAdapter1.Fill(Me.DataSet11, cTBLNAME)
aCM = Me.BindingContext(Me.DataSet11, cTBLNAME)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim iDelPos As Integer
iDelPos = aCM.Position
' DataRow-Instanz mit der "Löschmarkierung" versehen
Me.DataSet11.TESTTABELLE.Rows(iDelPos).Delete()
' DataAdapter schickt DELETE-Anweisung zur Datenbank
Me.OleDbDataAdapter1.Update(Me.DataSet11, cTBLNAME)
' zur Kontrolle neu einlesen
Me.DataSet11.Clear()
Me.OleDbDataAdapter1.Fill(Me.DataSet11, cTBLNAME)
End Sub
</pre>
Der <b>CurrencyManager</b> speichert über seine Eigenschaft <b>Position</b> den "aktuell ausgewählten" Datensatz. Über die <b>Delete</b>-Methode der Rows-Kollektion erhält der darunterliegende Datensatz aus dem DataSet (eigener Arbeitsspeicher) eine Lösch-Kennzeichnung, so dass der DataAdapter beim nachfolgenden <b>Update</b>-Aufruf auch den gleichen Datensatz aus der ACCESS-Datenbank löschen kann.
Als Alternative zum Aufruf der Delete-Methode der DataRow-Instanz steht auch die Methode <b>RemoveAt</b> des CurrencyManagers zur Verfügung. Auch in diesem Fall sorgt ein späterer Update-Aufruf des DataAdapters dafür, dass eine DELETE-Anweisung für diesen Datensatz zur SQL-Datenbank geschickt wird. Der Grund dafür besteht darin, dass diese Methode bei Klassen, die das Interface IList implementieren (also auch bei strongly typed DataSets) in Wirklichkeit Delete aufruft und die DataRow-Instanz nicht wirklich entfernt.
<pre>
Private Sub ButtonRemoveAt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonRemoveAt.Click
Dim iDelPos As Integer
iDelPos = aCM.Position
aCM.RemoveAt(iDelPos)
End Sub
</pre>
Der Vorteil von <b>RemoveAt</b> besteht darin, dass der Datensatz sofort aus dem DataGrid verschwindet, auch wenn der DataAdapter die Änderung noch nicht eingearbeitet und erneut eingelesen hat
Comment