Datensatz in der DB speichern Verfasst am: 30.12.2009, 10:55
Hallo alle zusammen!
Wie in diesem Forum bin ich auch in der VB.net programierung ein Neuling und hoffe hier kann mir der ein oder andere Helfen.
Zuzeit erstelle ich ein kleines Projekt um Werkzeuge zu verwalten. Dabei wird in einem ersten Form über ein Datagridview eine Übersicht aller Werkzeuge angezeigt und bei der Selektion eines Eintrags dieser oberhalb des Gridview in der Detailansicht angezeigt.
Über einen Butten "Anlegen" öffnet sich ein neues Form um einen neuen Datensatz anzulegen. Und genau hier hänge ich nun.
Bein Klick auf den Button "Anlegen" erhalte ich folgende Fehlermeldung (Siehe Notiz am Quellcode Form 2)
ArgumentExeption wurde nicht behandelt
Dies führt dazu, dass sich zwei Bindungen der Auflistung an dieselbe Eigenschaft binden. Parametername: binding
Hier der bisherige Code.
--- Form 1 ---------------
Public Class Start
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: Diese Codezeile lädt Daten in die Tabelle "BetriebsmittelDataSet.tblTische". Sie können sie bei Bedarf verschieben oder entfernen.
Me.TblTischeTableAdapter.Fill(Me.BetriebsmittelDataSet.tblTische)
pnlTische.Visible = False
End Sub
Private Sub btnTische_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTische.Click
pnlTische.Visible = True
End Sub
Private Sub btnAnlegen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnlegen.Click
Dim Tisch_Anlegen As New Tisch_Anlegen()
Tisch_Anlegen.ShowDialog() 'Neues Form zum anlegen eines Tisches öffnen
End Sub
End Class
--- Form 2 zum anlegen ------
Imports System.Data.SqlClient
Imports System.IO
Imports System.Windows.Forms
Public Class Tisch_Anlegen
Private conn As New SqlConnection("Server=AMD\SQLEXPRESS;Initial Catalog=Betriebsmittel;Integrated Security=True")
Dim da_Tische As New SqlDataAdapter("Select * from tblTische", conn)
Dim da_TischeVerwendung As New SqlDataAdapter("Select * from tblTischVerw", conn)
Dim dt_Tische As New DataTable("tblTische")
Dim dt_TischeVerwendung As New DataTable("tblTischVerw")
Private bs_Tische As New BindingSource()
Dim cmd As New SqlCommandBuilder(da_Tische) 'Wichtig für update, insert und delete
Private Sub Tisch_Anlegen_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: Diese Codezeile lädt Daten in die Tabelle "BetriebsmittelDataSet.tblTische". Sie können sie bei Bedarf verschieben oder entfernen.
Me.TblTischeTableAdapter.Fill(Me.BetriebsmittelDataSet.tblTische)
'Daten aus der DB in die DataTable übernehmen, DataTable können nun wie DB Tabelen verwendet werden
conn.Open()
da_TischeVerwendung.Fill(dt_TischeVerwendung)
da_Tische.Fill(dt_Tische)
conn.Close()
bs_Tische.DataSource = dt_Tische
'ComboBox für Verwendungsarten
cmbVerwendung.DataSource = dt_TischeVerwendung
cmbVerwendung.DisplayMember = "TischVerw"
txtWerkzeugNr.DataBindings.Add("Text", bs_Tische, "WerkzeugNr") <--------------------HIER ENTSTEHT DER FEHLER
txtAussenDurchm.DataBindings.Add("Text", bs_Tische, "AussenDurchm")
txtBohrungDurchm.DataBindings.Add("Text", bs_Tische, "BohrungDurchm")
'cmbVerwendung.DataBindings
End Sub
Private Sub btnSpeichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSpeichern.Click
bs_Tische.AddNew()
bs_Tische.EndEdit() : da_Tische.Update(dt_Tische)
End Sub
Private Sub btnAbbrechen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAbbrechen.Click
bs_Tische.CancelEdit()
End Sub
End Class _________________
fuige Newbie
Anmeldedatum: 30.12.2009 Beiträge: 2
Verfasst am: 30.12.2009, 16:48
Hallihallo!
Nach langem Suchen und vielen Versuchen hier nun der Code des Form2 in funktionstüchtiger Ausführung.
Vielleicht hilfts dem ein oder anderen der vor dem selben Problem steht.
Public Class Tisch_Anlegen
Private conn As New SqlConnection("Server=AMD\SQLEXPRESS;Initial Catalog=Betriebsmittel;Integrated Security=True")
Dim da_Tische As New SqlDataAdapter("Select * from tblTische", conn)
Dim da_TischeVerwendung As New SqlDataAdapter("Select * from tblTischVerw", conn)
Dim dt_Tische As New DataTable("tblTische")
Dim dt_TischeVerwendung As New DataTable("tblTischVerw")
Private bs_Tische As New BindingSource()
Dim cmd As New SqlCommandBuilder(da_Tische) 'Wichtig für update, insert und delete
Private Sub Tisch_Anlegen_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: Diese Codezeile lädt Daten in die Tabelle "BetriebsmittelDataSet.tblTische". Sie können sie bei Bedarf verschieben oder entfernen.
Me.TblTischeTableAdapter.Fill(Me.BetriebsmittelDataSet.tblTische)
'Daten für ComboBoxen übernehmen
'Daten aus der DB in die DataTable übernehmen, DataTable können nun wie DB Tabelen verwendet werden
conn.Open()
da_TischeVerwendung.Fill(dt_TischeVerwendung)
conn.Close()
'ComboBoxen für Selektion
cmbVerwendung.DataSource = dt_TischeVerwendung
cmbVerwendung.DisplayMember = "TischVerw"
End Sub
Private Sub btnSpeichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSpeichern.Click
Dim ds_Tische As New DataSet("tblTische")
da_Tische.FillSchema(ds_Tische, SchemaType.Source, "tblTische")
da_Tische.Fill(ds_Tische, "tblTische")
' Neue DataTable Instanz erstellen
Dim tblTischNeu As DataTable
tblTischNeu = ds_Tische.Tables("tblTische")
Dim dr_Aktuell As DataRow
Try
' Neues DataRow Objekt der neuen DataTable Instanz erstellen
dr_Aktuell = tblTischNeu.NewRow()
dr_Aktuell("WerkzeugNr") = txtWerkzeugNr.Text
dr_Aktuell("AussenDurchm") = txtAussenDurchm.Text
dr_Aktuell("BohrungDurchm") = txtBohrungDurchm.Text
dr_Aktuell("Stck") = txtStueck.Text
'Die neuen Daten als neue Row im DataTable Objekt hinzufügen
tblTischNeu.Rows.Add(dr_Aktuell)
'Daten in die Datenbank abspeichern
TblTischeBindingSource.EndEdit()
da_Tische.Update(ds_Tische, "tblTische")
MsgBox("Daten wurden gespeichert!")
Close() 'Form schließen wenn speichern erfolgreich
Catch ex As Exception
MsgBox("Fehler oder unvollständige Angaben bei der Dateneingabe")
End Try
End Sub
Private Sub btnAbbrechen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAbbrechen.Click
bs_Tische.CancelEdit()
End Sub
End Class