Hallo Zusammen!
Ich erstelle gerade ein kleines Programm mit WPF und VB in Visual Studio 2012. Im Hauptfenster habe ich eine Tabelle (DataGrid). Die Daten lese ich mittels ADO.net aus einer Excel-Datei ein. Das Datagrid ist völlig leer und die 5 Spalten werden durch das Einlesen der Excel-Tabelle erstellt. Das funktioniert auch gut.
Dann kann ich eine Zeile markieren und auf den Button "hinzufügen" klicken. Jetzt öffnet sich ein weiteres Fenster wo es für jede markierte Zelle eine Textbox gibt. Hier kann ich nun neue Daten eintragen und mit Klick auf den Button "Sichern" in das Datagrid eintragen. Das klappt auch schon sehr gut.
Die nächste Funktion ist das Bearbeiten eines Eintrages. Gleiche Prozedur wie Hinzufügen nur mit Übernahme der markierten Daten in die Textboxen. Geht also auch schon.
Jetzt zu meinem Problem: Wie bekomme ich die geänderten Daten in meine Excel Datei zurück?
Microsoft hat mir schon einiges an Info geboten und auch hier im Forum sowie in restlichen Internet habe ich verschiedene Ansätze gefunden, die ich auch fleißig alle ausprobiert habe. Doch leider kommen immer neue Fehlermeldungen und ich weiß gar nicht mehr was ich noch falsch mache. Kann mir jemand einen Tipp geben wie ich jetzt neu an diese Prozedur rangehen muss.
Ich weiß im Code nicht wie die Überschriften der Spalten heißen, da sie ja beim Einlesen erst erstellt werden. Für den Update Befehl brauch ich aber einen parametrisierten Befehl. Nur wie kann der ohne Kenntnis der Überschriften aussehen. Stimmt es, dass ich in Excel keine Zeilen löschen kann. Sollte ich dann alles ganz anders anfangen?
Hier mal mein Code, den ich zum Einfügen ins Datagrid benutze:
Hier mal die Zeile hinzufügen, der Code ändert automatisch das Datagrid:
Jetzt fehlt mir nur noch der Code zum Übertragen des aktuellen Datagrid in die Excel Datei.
Bitte helft mir!
Tschüßi Lubeca
Ich erstelle gerade ein kleines Programm mit WPF und VB in Visual Studio 2012. Im Hauptfenster habe ich eine Tabelle (DataGrid). Die Daten lese ich mittels ADO.net aus einer Excel-Datei ein. Das Datagrid ist völlig leer und die 5 Spalten werden durch das Einlesen der Excel-Tabelle erstellt. Das funktioniert auch gut.
Dann kann ich eine Zeile markieren und auf den Button "hinzufügen" klicken. Jetzt öffnet sich ein weiteres Fenster wo es für jede markierte Zelle eine Textbox gibt. Hier kann ich nun neue Daten eintragen und mit Klick auf den Button "Sichern" in das Datagrid eintragen. Das klappt auch schon sehr gut.
Die nächste Funktion ist das Bearbeiten eines Eintrages. Gleiche Prozedur wie Hinzufügen nur mit Übernahme der markierten Daten in die Textboxen. Geht also auch schon.
Jetzt zu meinem Problem: Wie bekomme ich die geänderten Daten in meine Excel Datei zurück?
Microsoft hat mir schon einiges an Info geboten und auch hier im Forum sowie in restlichen Internet habe ich verschiedene Ansätze gefunden, die ich auch fleißig alle ausprobiert habe. Doch leider kommen immer neue Fehlermeldungen und ich weiß gar nicht mehr was ich noch falsch mache. Kann mir jemand einen Tipp geben wie ich jetzt neu an diese Prozedur rangehen muss.
Ich weiß im Code nicht wie die Überschriften der Spalten heißen, da sie ja beim Einlesen erst erstellt werden. Für den Update Befehl brauch ich aber einen parametrisierten Befehl. Nur wie kann der ohne Kenntnis der Überschriften aussehen. Stimmt es, dass ich in Excel keine Zeilen löschen kann. Sollte ich dann alles ganz anders anfangen?
Hier mal mein Code, den ich zum Einfügen ins Datagrid benutze:
VB.NET-Quellcode
- Public Shared objDatensatz As System.Data.Dataset ' Variable für den Adapter
- Public Shared objAdapter As System.Data.OleDbDataAdapter ' Variable für den Adapter
- Shared Sub ExcelDateieinbinden(ByVal MeinPfad As String, ByVal TestGrid As DataGrid)
- ' lokale Variablendeklaration
- Dim objKommando As OleDbCommand ' Variable für Befehl zum Holen der Daten
- Dim Verbindung As System.Data.OleDb.OleDbConnection = Nothing ' Variable für die Verbindung
- ' Öffnen der Excel-Datei und Auslesen der Daten, zum Speichern im DataSet
- Try ' Beginn eines Versuchs
- ' Verbindung bestimmen
- Verbindung = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source='" & MeinPfad & " ';" & "Extended Properties = Excel 12.0;") 'file1.FileName
- ' Verbindung öffnen
- Verbindung.Open()
- ' Adapter generieren
- objAdapter = New System.Data.OleDb.OleDbDataAdapter
- ' Befehl zum holen der Daten
- objKommando = New OleDbCommand("SELECT * from [Tabelle1$]", Verbindung)
- ' Befehl dem Adapter übergeben
- objAdapter.SelectCommand = objKommando
- ' Neue DatenSet generieren
- objDatensatz = New System.Data.DataSet
- ' DatenSet füllen mit Werten
- objAdapter.Fill(objDatensatz, "Liste der Kommunikationsanlagen")
- ' DataGrid "TestGrid" die Daten zuweisen
- TestGrid.DataContext = objDatensatz.Tables("Liste der Kommunikationsanlagen").DefaultView
- ' Bindung an die Daten erstellen
- TestGrid.SetBinding(System.Windows.Controls.DataGrid.ItemsSourceProperty, New System.Windows.Data.Binding())
- ' Verbindung schließen
- Verbindung.Close()
- Catch ex As Exception ' Falls der Ablauf nicht klappt
- Verbindung.Close() ' Verbindung schließen
- MsgBox("Fehler: " & Err.Number & vbCrLf & "Bitte werden Sie sich an den Systemadministrator", MsgBoxStyle.Critical, "Irgendetwas Stimmt nicht!")
- End Try ' Ende des Versuchs
- End Sub ' Ende der Prozedur
Hier mal die Zeile hinzufügen, der Code ändert automatisch das Datagrid:
VB.NET-Quellcode
- Shared Sub Zeileneu(ByVal VarKdnNr As Integer, ByVal VarKdnName As String, ByVal VarAnbz As String, ByVal VarAnnr As String, ByVal VarCboFern As String)
- Dim Datentabelle As System.Data.DataTable ' Variable für die Datentabelle
- Dim Datenzeile As System.Data.DataRow ' Variable für die Zeile
- ' Zugriff auf Tabelle
- Datentabelle = objDatensatz.Tables(0)
- ' Anfügen eines neuen Datensatzes
- Datenzeile = Datentabelle.NewRow
- ' Füllen der Zeile/des Datensatzes
- Datenzeile(0) = VarKdnNr
- Datenzeile(1) = VarKdnName
- Datenzeile(2) = VarAnbz
- Datenzeile(3) = VarAnnr
- Datenzeile(4) = VarCboFern
- ' Anfügen der Zeile an Tabelle
- Datentabelle.Rows.Add(Datenzeile)
- 'objDatensatz.Tables(0).Rows.Add(Datenzeile)
- End Sub ' Ende der Prozedur
Jetzt fehlt mir nur noch der Code zum Übertragen des aktuellen Datagrid in die Excel Datei.
Bitte helft mir!
Tschüßi Lubeca