Anfängerfrage: wie kann DataTable zu dem gerade upgedatetem Satz bringen?

02/10/2009 - 15:39 von Horst Mayer | Report spam
Hallo!
Ich update Sàtze so:
dtData1 = GetDataTable(OpenConnection, "select * from nursing where
PatientID = 33 order by ID", objAdapter)
Dim cmdBuilder As New SqlClient.SqlCommandBuilder(objAdapter)
objAdapter.UpdateCommand = cmdBuilder.GetUpdateCommand

With dtData1
.Rows(DataGridView1.CurrentRow.Index).Item("PatientId") =
iPatientID
.Rows(DataGridView1.CurrentRow.Index).Item("Diagnose") = "New
diagnosis"
.Rows(DataGridView1.CurrentRow.Index).Item("Erstellt") = sUserID
End With

objAdapter.Update(dtData1)
dtData1 = GetDataTable(OpenConnection, "select * from nursing where
PatientID = 33 order by ID")
DataGridView1.DataSource = dtData1

Alles funktioniert schön, aber:
Wie kann ich dtData1 dazu bringen, bei dem geànderten Satz zu bleiben, oder
zu ihm wieder zurück zu kommen? Nach dem Update springt der Pfeil im
DataGridView und in den gebundenen Textfeldern an den Anfang.

Unten ist der komplette Code im Modul.
Vielen Dank für jede Idee!
Gruß
Horst

Public Class aaa

Dim dtData1 As New DataTable
Dim iPatientID As Integer
Dim objAdapter As New SqlClient.SqlDataAdapter
Private Sub frmHandlung_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
dtData1 = GetDataTable(OpenConnection, "select * from nursing where
PatientID = 33", objAdapter)
Me.DataGridView1.DataSource = dtData1
iPatientID = 33
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
dtData1 = GetDataTable(OpenConnection, "select * from nursing where
PatientID = 33 order by ID", objAdapter)
Dim cmdBuilder As New SqlClient.SqlCommandBuilder(objAdapter)
objAdapter.UpdateCommand = cmdBuilder.GetUpdateCommand

With dtData1
.Rows(DataGridView1.CurrentRow.Index).Item("PatientId") =
iPatientID
.Rows(DataGridView1.CurrentRow.Index).Item("Diagnose") = "New
diagnosis"
.Rows(DataGridView1.CurrentRow.Index).Item("Erstellt") = sUserID
End With

objAdapter.Update(dtData1)
dtData1 = GetDataTable(OpenConnection, "select * from nursing where
PatientID = 33 order by ID")
DataGridView1.DataSource = dtData1
End Sub
Private Function GetDataTable(ByRef objConn As SqlClient.SqlConnection,
ByVal SQLQuery As String, Optional ByRef dataAdapter As
SqlClient.SqlDataAdapter = Nothing) As DataTable
Dim ds As New DataSet, objAdapter As SqlClient.SqlDataAdapter,
objcmd As SqlClient.SqlCommand

If objConn.State = ConnectionState.Open Then
objcmd = New SqlClient.SqlCommand(SQLQuery, objConn)
objAdapter = New SqlClient.SqlDataAdapter()
objAdapter.SelectCommand = objcmd
If Not dataAdapter Is Nothing Then
dataAdapter = objAdapter
End If
objAdapter.Fill(ds)
objConn.Close()
Return ds.Tables(0)
Else
Return Nothing
End If

End Function
End Class
 

Lesen sie die antworten

#1 Elmar Boye
03/10/2009 - 11:00 | Warnen spam
Hall Horst,

Horst Mayer schrieb:
Ich update Sàtze so:
dtData1 = GetDataTable(OpenConnection, "select * from nursing where
PatientID = 33 order by ID", objAdapter)




Ein SqlParameter für die PatentID wàre sinnvoller,
und die 33 als Parameter an GetDataTable zu übergeben

dtData1 = GetDataTable(OpenConnection, "select * from nursing
where PatientID = 33 order by ID")
DataGridView1.DataSource = dtData1



Wie kann ich dtData1 dazu bringen, bei dem geànderten Satz zu bleiben,
oder zu ihm wieder zurück zu kommen?



Solange Du eine neue DataTable abrufst und zuweist, mußt Du Dir den
Primàrschlüssel merken und wieder herstellen, in dem Du den gebundenen
CurrencyManger durchlàufst. Was nicht gerade praktisch ist.

Einfacher wàre es Du führst, die Aktualisierung direkt auf dem dtData1 aus,
denn in Deinen Code gibt keinen Grund, die DataTable jedesmal erneut abzurufen.

Willst Du die Daten auffrischen, so kannst Du dies mit der gebundenen
Tabelle über DataTable.Merge erreichen:
http://msdn.microsoft.com/de-de/lib...merge.aspx

Gruß Elmar

Ähnliche fragen