EDIT 2:
Ich habe das Ganze nun nochmal vereinfacht um DataGrids besser verstehen zu können. Folgender Code soll zumindest mal die bestehenden Daten in der Datenbank updaten können. Hierzu hab ich auch mal ein erstes Error-Handling eingebaut. Komischerweise läuft mir der Code bis zur letzten (OK-)Meldung durch, schreibt allerdings nichts in die Datenbank. Weiß vielleicht jemand von Euch, woran das liegen könnte - oder ob ich was übersehen hab?
Spoiler anzeigen
Hallo zusammen!
Ich bin im Thema VB (2013 Express) und WPF noch
total neu und mache gerade meine ersten Geh-Versuche - also bitte
verzeiht mir meine Unwissenheit
Was ich momentan habe ist eine Maske mit mehreren Feldern und einem DataGrid.
Das
DataGrid wird aktuell über eine View aus der DB (SQL Server 2012
Express) befüllt. Da die Befüllung allerdings unerwünscht ist, habe ich
der View-Select mitgegeben, dass nur Daten mit einer ID = -1 angezeigt
werden sollen. Eventuell liegt ja auch hier bereits ein Fehler vor.
Nun
soll der User in das DataGrid mehrere Zeilen eintragen (Adressen),
welche später bei einem Klick auf "Speichern" mitsamt den anderen Daten
(Textboxen) in die DB geschrieben werden sollen.
Könnt Ihr mir eventuell Tipps geben, wie man sowas am Besten bewerkstelligt?
Hier mal mein Code vom DataGrid.
VB
XAML
EDIT:
Ich
versuche das gerade mal testweise mit folgendem Code zu lösen,
allerdings kommt da die folgende Fehlermeldung. Weiß eventuell wer,
woran das liegt? Habe noch nicht alle Felder des DataGrids eingepflegt
(muss man das?)
FEHLER:
Ein Ausnahmefehler des Typs "System.ArgumentException" ist in System.Data.dll aufgetreten.
Zusätzliche
Informationen: Das Format der Initialisierungszeichenfolge stimmt nicht
mit der Spezifikation überein, die bei Index '0' beginnt.
Ich habe das Ganze nun nochmal vereinfacht um DataGrids besser verstehen zu können. Folgender Code soll zumindest mal die bestehenden Daten in der Datenbank updaten können. Hierzu hab ich auch mal ein erstes Error-Handling eingebaut. Komischerweise läuft mir der Code bis zur letzten (OK-)Meldung durch, schreibt allerdings nichts in die Datenbank. Weiß vielleicht jemand von Euch, woran das liegen könnte - oder ob ich was übersehen hab?
Quellcode
- Imports System
- Imports System.Data
- Imports System.Data.SqlClient
- Class MainWindow
- Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs) Handles MyBase.Loaded
- Dim SpedDataSet As UpdateSingleTableWalkthrough.spedDataSet = CType(Me.FindResource("SpedDataSet"), UpdateSingleTableWalkthrough.spedDataSet)
- 'Lädt Daten in Tabelle "baua_auftragsadressen". Sie können diesen Code nach Bedarf ändern.
- Dim SpedDataSetbaua_auftragsadressenTableAdapter As UpdateSingleTableWalkthrough.spedDataSetTableAdapters.baua_auftragsadressenTableAdapter = New UpdateSingleTableWalkthrough.spedDataSetTableAdapters.baua_auftragsadressenTableAdapter()
- SpedDataSetbaua_auftragsadressenTableAdapter.Fill(SpedDataSet.baua_auftragsadressen)
- Dim Baua_auftragsadressenViewSource As System.Windows.Data.CollectionViewSource = CType(Me.FindResource("Baua_auftragsadressenViewSource"), System.Windows.Data.CollectionViewSource)
- Baua_auftragsadressenViewSource.View.MoveCurrentToFirst()
- End Sub
- Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
- Dim spedDataset As New spedDataSet
- Dim myconnection As New SqlConnection
- myconnection = New SqlConnection("server=localhost;uid=xxx];pwd=xxx;database=sped")
- Try
- myconnection.Open()
- Catch x As Exception
- MsgBox("Verbindung zur Datenbank fehlgeschlagen")
- Return
- End Try
- MsgBox("Verbindung zur Datenbank erfolgreich")
- Dim SqlDataAdapter As New SqlDataAdapter("SELECT * FROM [baua_auftragsadressen]", myconnection)
- Try
- SqlDataAdapter.Update(spedDataset.Tables("baua_auftragsadressen"))
- Catch x As Exception
- MsgBox("SqlAdapter geht nicht")
- myconnection.Close()
- Return
- End Try
- MsgBox("Update sollte erfolgreich durchlaufen sein")
- myconnection.Close()
- End Sub
- End Class
Hallo zusammen!
Ich bin im Thema VB (2013 Express) und WPF noch
total neu und mache gerade meine ersten Geh-Versuche - also bitte
verzeiht mir meine Unwissenheit
Was ich momentan habe ist eine Maske mit mehreren Feldern und einem DataGrid.
Das
DataGrid wird aktuell über eine View aus der DB (SQL Server 2012
Express) befüllt. Da die Befüllung allerdings unerwünscht ist, habe ich
der View-Select mitgegeben, dass nur Daten mit einer ID = -1 angezeigt
werden sollen. Eventuell liegt ja auch hier bereits ein Fehler vor.
Nun
soll der User in das DataGrid mehrere Zeilen eintragen (Adressen),
welche später bei einem Klick auf "Speichern" mitsamt den anderen Daten
(Textboxen) in die DB geschrieben werden sollen.
Könnt Ihr mir eventuell Tipps geben, wie man sowas am Besten bewerkstelligt?
Hier mal mein Code vom DataGrid.
VB
Quellcode
- Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs) Handles MyBase.Loaded
- Dim AuftragsadressenErfassung As
- WpfApplication6.AuftragsadressenErfassung =
- CType(Me.FindResource("AuftragsadressenErfassung"),
- WpfApplication6.AuftragsadressenErfassung)
- Dim
- AuftragsadressenErfassungAuftragsadressen__Sendungserfassung_TableAdapter
- As
- WpfApplication6.AuftragsadressenErfassungTableAdapters.Auftragsadressen__Sendungserfassung_TableAdapter
- = New
- WpfApplication6.AuftragsadressenErfassungTableAdapters.Auftragsadressen__Sendungserfassung_TableAdapter()
- AuftragsadressenErfassungAuftragsadressen__Sendungserfassung_TableAdapter.Fill(AuftragsadressenErfassung._Auftragsadressen__Sendungserfassung_)
- Dim _Auftragsadressen__Sendungserfassung_ViewSource As
- System.Windows.Data.CollectionViewSource =
- CType(Me.FindResource("_Auftragsadressen__Sendungserfassung_ViewSource"),
- System.Windows.Data.CollectionViewSource)
- _Auftragsadressen__Sendungserfassung_ViewSource.View.MoveCurrentToFirst()
- End Sub
XAML
Quellcode
- <DataGrid
- x:Name="AuftragsadressenErfassung" AutoGenerateColumns="False"
- EnableRowVirtualization="True" ItemsSource="{Binding
- Source={StaticResource
- _Auftragsadressen__Sendungserfassung_ViewSource}}" Margin="10,83,10,579"
- RowDetailsVisibilityMode="VisibleWhenSelected">
- <DataGrid.Columns>
- <DataGridTextColumn x:Name="Baua_bauaidColumn"
- Binding="{Binding baua_bauaid}" Header="baua bauaid" IsReadOnly="True"
- Width="SizeToHeader" Visibility="Hidden"/>
- <DataGridTextColumn x:Name="Baua_baufidColumn" Binding="{Binding
- baua_baufid}" Header="baua baufid" Width="SizeToHeader"
- Visibility="Hidden"/>
- <DataGridTextColumn
- x:Name="Baua_typColumn" Binding="{Binding baua_typ}" Header="Adr-Typ"
- Width="SizeToHeader"/>
- <DataGridTextColumn
- x:Name="Baua_adridColumn" Binding="{Binding baua_adrid}"
- Header="Adress-ID" Width="SizeToHeader"/>
- <DataGridTextColumn x:Name="Baua_termvonColumn" Binding="{Binding
- baua_termvon}" Header="baua termvon" Width="SizeToHeader"
- Visibility="Hidden"/>
- <DataGridTextColumn
- x:Name="Baua_termbisColumn" Binding="{Binding baua_termbis}"
- Header="baua termbis" Width="SizeToHeader" Visibility="Hidden"/>
- <DataGridTextColumn x:Name="Baua_planvonColumn"
- Binding="{Binding baua_planvon}" Header="baua planvon"
- Width="SizeToHeader" Visibility="Hidden"/>
- <DataGridTextColumn x:Name="Baua_planbisColumn" Binding="{Binding
- baua_planbis}" Header="baua planbis" Width="SizeToHeader"
- Visibility="Hidden"/>
- <DataGridTextColumn
- x:Name="Baua_istvonColumn" Binding="{Binding baua_istvon}" Header="baua
- istvon" Width="SizeToHeader" Visibility="Hidden"/>
- <DataGridTextColumn x:Name="Baua_istbisColumn" Binding="{Binding
- baua_istbis}" Header="baua istbis" Width="SizeToHeader"
- Visibility="Hidden"/>
- <DataGridTextColumn
- x:Name="Baua_artColumn" Binding="{Binding baua_art}" Header="baua art"
- Width="SizeToHeader" Visibility="Hidden"/>
- <DataGridTextColumn x:Name="Baua_name1Column" Binding="{Binding
- baua_name1}" Header="Name 1" Width="SizeToHeader"/>
- <DataGridTextColumn x:Name="Baua_name2Column" Binding="{Binding
- baua_name2}" Header="Name 2" Width="SizeToHeader"/>
- <DataGridTextColumn x:Name="Baua_name3Column" Binding="{Binding
- baua_name3}" Header="Name 3" Width="SizeToHeader"/>
- <DataGridTextColumn x:Name="Baua_strasse1Column" Binding="{Binding
- baua_strasse1}" Header="Strasse 1" Width="SizeToHeader"/>
- <DataGridTextColumn x:Name="Baua_strasse2Column"
- Binding="{Binding baua_strasse2}" Header="Strasse 2"
- Width="SizeToHeader"/>
- <DataGridTextColumn
- x:Name="Baua_landColumn" Binding="{Binding baua_land}" Header="Land"
- Width="SizeToHeader"/>
- <DataGridTextColumn
- x:Name="Baua_plzColumn" Binding="{Binding baua_plz}" Header="PLZ"
- Width="SizeToHeader"/>
- <DataGridTextColumn
- x:Name="Baua_ortColumn" Binding="{Binding baua_ort}" Header="Ort"
- Width="SizeToHeader"/>
- <DataGridTextColumn
- x:Name="Baua_refColumn" Binding="{Binding baua_ref}" Header="Referenz"
- Width="SizeToHeader"/>
- </DataGrid.Columns>
- </DataGrid>
EDIT:
Ich
versuche das gerade mal testweise mit folgendem Code zu lösen,
allerdings kommt da die folgende Fehlermeldung. Weiß eventuell wer,
woran das liegt? Habe noch nicht alle Felder des DataGrids eingepflegt
(muss man das?)
FEHLER:
Ein Ausnahmefehler des Typs "System.ArgumentException" ist in System.Data.dll aufgetreten.
Zusätzliche
Informationen: Das Format der Initialisierungszeichenfolge stimmt nicht
mit der Spezifikation überein, die bei Index '0' beginnt.
Quellcode
- Dim conn As New SqlConnection
- Dim command As New SqlCommand
- conn.ConnectionString = "conn string"
- command.CommandText = "insert into baua_auftragsadressen
- (baua_name1,baua_name2,baua_name3,baua_strasse1) values
- (@name1,@name2,@name3,@strasse1)"
- command.Parameters.Add("@name1", SqlDbType.NVarChar)
- command.Parameters.Add("@name2", SqlDbType.NVarChar)
- command.Parameters.Add("@name3", SqlDbType.NVarChar)
- command.Parameters.Add("@strasse1", SqlDbType.NVarChar)
- conn.Open()
- Command.Connection = conn
- 'load grid
- For i As Integer = 0 To AuftragsadressenErfassung.Items.Count - 2
- command.Parameters(0).Value = Me.AuftragsadressenErfassung.Items(i).Cells(1).Value
- command.Parameters(1).Value = Me.AuftragsadressenErfassung.Items(i).Cells(2).Value
- command.Parameters(2).Value = Me.AuftragsadressenErfassung.Items(i).Cells(3).Value
- command.Parameters(3).Value = Me.AuftragsadressenErfassung.Items(i).Cells(4).Value
- command.ExecuteNonQuery()
- Next
- conn.Close()
- MsgBox("Adressen wurden gespeichert")
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „nitg“ ()