Hallo,
ich bin am verzweifeln. Ich habe ein DGV, welches ich an ein Datatable gebunden habe. Der User soll über eine Suchmaske eine TitelNr auswählen und diese soll automatisch in die entsprechende Zeile im DGV eingetragen werden. Der Eintrag wird auch am Bildschirm angezeigt, aber ich habe folgendes falsches Verhalten:
- Wird ein bestehender Datensatz überschrieben, so wird nur der korrekte Wert in der SQL-Tabelle gespeichert, wenn der User zusätzlich einen anderen Wert im DGV ändert. Ansonsten werden die Werte nicht abgespeichert.
- Beim Erzeugen einer neuen Zeile im DGV wird diese auch angezeigt, aber wenn der User z.B. ins Feld Menge clickt, um den Wert einzutragen, ist die Zeile auf einmal wieder leer.
Was mache ich falsch oder ist mein Ansatz mittels DGV völlig falsch?
Anbei noch Programmcode zum Füllen der DGV :
, zum Füllen nach Verlassen der Suchmaske:
und zum Speichern der Werte aus DGV in SQL:
Danke
ich bin am verzweifeln. Ich habe ein DGV, welches ich an ein Datatable gebunden habe. Der User soll über eine Suchmaske eine TitelNr auswählen und diese soll automatisch in die entsprechende Zeile im DGV eingetragen werden. Der Eintrag wird auch am Bildschirm angezeigt, aber ich habe folgendes falsches Verhalten:
- Wird ein bestehender Datensatz überschrieben, so wird nur der korrekte Wert in der SQL-Tabelle gespeichert, wenn der User zusätzlich einen anderen Wert im DGV ändert. Ansonsten werden die Werte nicht abgespeichert.
- Beim Erzeugen einer neuen Zeile im DGV wird diese auch angezeigt, aber wenn der User z.B. ins Feld Menge clickt, um den Wert einzutragen, ist die Zeile auf einmal wieder leer.
Was mache ich falsch oder ist mein Ansatz mittels DGV völlig falsch?
Anbei noch Programmcode zum Füllen der DGV :
Code:
Dim strSQL, strSQL2 As String '-- Anfrage auch für das spätere Update strSQL2 = "Select * From AuftragPos Where AuftragsNr = '" & _ Me.txtAuftragsNr.Text & " '" '-- Anfrage für das Anzeigen strSQL = "SELECT AuftragPos.PosNr, Titel.ISBN, Titel.TitelKurz, " _ & "AuftragPos.PreisPos as PreisPos, AuftragPos.Menge, Titel.Bestand, " _ & "AuftragsNr, Titel.TitelNr, LieferNr, LieferDatum, LieferMenge, " _ & "AuftragPos.Bemerkung, AuftragPos.ProZeit, AuftragPos.ProBenutzer, LoeschKz, MengeInBuch " _ & "FROM Titel RIGHT OUTER JOIN " _ & "AuftragPos ON Titel.TitelNr = AuftragPos.TitelNr " _ & "WHERE AuftragsNr = '" & Me.txtAuftragsNr.Text & "'" dtBestellungPos.Clear() '-- Fehler AusnaHme generieren Try '-- data adapter erzeugen, dann fill the datatable SQLBestellungPos = New SqlClient.SqlDataAdapter(strSQL, MakeConn) SQLBestellungPos2 = New SqlClient.SqlDataAdapter(strSQL2, MakeConn) SQLBestellungPos.Fill(dtBestellungPos) SQLBestellungPos2.Update(dtBestellungPos)
Code:
Dim frm As New frmSuche() ' Display frm as a modal dialog frm.ShowDialog() 'dgBestellung.Rows.Item(Me.Zelle).Cells("TitelNr").Value() = TitelNr Me.dgBestellung.Rows(Me.Zelle).Cells("AuftragsNr").Value = Me.txtAuftragsNr.Text MaxPos = MaxPos + 1 Me.dgBestellung.Rows(Me.Zelle).Cells("PosNr").Value = MaxPos Me.dgBestellung.Rows(Me.Zelle).Cells("LieferMenge").Value = 0 Me.dgBestellung.Rows(Me.Zelle).Cells("Menge").Value = 0 Try Me.dgBestellung.Rows(Me.Zelle).Cells("TitelNr").Value = TitelNr ...
Code:
Try '-- neue Zeile im Dataset If newDS Then ds.Tables(Table).Rows.Add(dr) 'MsgBox(newDS & dr(0) & "," & dr(1) & "," & dr(2) & "," & dr(3) & "," & dr(4) & "," & dr(5) & "," & dr(6) & "," & dr(7) & "," & dr(8) & "," & dr(9) & "," & dr(10) & "," & dr(11) & ",") End If '-- command builder wird erstellt cb=command builder Dim cb As SqlClient.SqlCommandBuilder cb = New SqlClient.SqlCommandBuilder(SQL) If newDS Then '-- Have the command builder create an Insert SQL command SQL.InsertCommand = cb.GetInsertCommand Else '-- Have the command builder create an update SQL command SQL.UpdateCommand = cb.GetUpdateCommand End If '-- Perform the update SQL command, then close the connection SQL.Update(ds, Table) ds.Tables(Table).AcceptChanges() If newDS Then SQL.InsertCommand.Connection.Close() Else SQL.UpdateCommand.Connection.Close() End If
Comment