Hallo,
ich habe ein Problem, ich habe ein Tool erstellt, welches Daten in XML Speichern soll, diese "Daten" sollen in einen DataGridView geladen werden, Änderungen gespeichert werden.. Die xml Datei soll eigentlich ins Programmverzeichnis erstellt/geladen werden.. (Was auch nicht Klappt)
Wenn ich den Code, ausführe bekomme ich beim Laden und oder Speichern den Fehler das das Stammelement nicht gefunden wird. Und das die Datei gerade von einen anderen Prozess verwendet wird. (Mit XML hab ich noch nie gearbeitet..) HILFE..
An bei der Code den ich bis her habe..
Für jede Hilfe bin ich Dankbar.
ich habe ein Problem, ich habe ein Tool erstellt, welches Daten in XML Speichern soll, diese "Daten" sollen in einen DataGridView geladen werden, Änderungen gespeichert werden.. Die xml Datei soll eigentlich ins Programmverzeichnis erstellt/geladen werden.. (Was auch nicht Klappt)
Wenn ich den Code, ausführe bekomme ich beim Laden und oder Speichern den Fehler das das Stammelement nicht gefunden wird. Und das die Datei gerade von einen anderen Prozess verwendet wird. (Mit XML hab ich noch nie gearbeitet..) HILFE..
An bei der Code den ich bis her habe..
VB.NET-Quellcode
- Public Class Form2
- Dim dt As New DataTable
- Dim filestream As IO.FileStream
- Const xmldaten As String = "C:\Temp\passwortliste.xml"
- Private Sub CreateData()
- With dt
- .TableName = "testdaten"
- .Columns.Add("ID")
- .Columns.Add("Account")
- .Columns.Add("WebseitenURL")
- .Columns.Add("Benutzername")
- .Columns.Add("Passwort")
- .PrimaryKey = { .Columns("ID")}
- End With
- dt.WriteXml(xmldaten, XmlWriteMode.WriteSchema)
- End Sub
- Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- If Not IO.File.Exists(xmldaten) Then CreateData()
- End Sub
- Private Sub Btnload_Click(sender As Object, e As System.EventArgs) Handles Btnload.Click
- Try
- dt.Clear()
- dt.ReadXml(xmldaten)
- dt.AcceptChanges()
- dgv.DataSource = dt
- Catch ex As Exception
- MsgBox(ex.Message)
- End Try
- End Sub
- Private Sub BtnSave_Click(sender As Object, e As System.EventArgs) Handles Btnsave.Click
- Try
- If Not Writexmltofile() Then
- If MsgBox("Änderungen konnten nicht gespeichert werden." &
- vbCrLf &
- "Trotzdem speichern?",
- MsgBoxStyle.Exclamation Or MsgBoxStyle.OkCancel) =
- MsgBoxResult.Cancel Then Exit Sub
- dt.WriteXml(xmldaten, 0)
- End If
- Catch ex As Exception
- MsgBox(ex.Message)
- End Try
- End Sub
- Public Function Writexmltofile() As Boolean
- Dim fs As IO.FileStream = IO.File.Open(xmldaten, IO.FileMode.Open, IO.FileAccess.ReadWrite, IO.FileShare.Read)
- Dim dt_current As New DataTable
- dt_current.ReadXml(fs)
- With dt_current
- If .Columns.Count <> dt.Columns.Count Then Return False
- For c As Integer = 0 To .Columns.Count - 1
- If Not dt.Columns.IndexOf(.Columns(c).ColumnName) = c Then
- fs.Close() 'Spaltenschema inzwischen geändert
- Return False
- End If
- Next c
- Dim pcn As String = dt.PrimaryKey(0).ColumnName
- For r As Integer = 0 To .Rows.Count - 1
- Dim row_user As DataRow =
- dt.Rows.Find(.Rows(r)(pcn))
- If row_user IsNot Nothing Then
- For c As Integer = 0 To .Columns.Count - 1
- Dim cc As Integer =
- dt.Columns.IndexOf(.Columns(c).ColumnName)
- If Not .Rows(r)(c).Equals _
- (row_user(cc, DataRowVersion.Original)) Then
- fs.Close() 'Zeileninhalt inzwischen extern geändert
- Return False
- End If
- If Not row_user.RowState = DataRowState.Unchanged Then
- .Rows(r)(c) = row_user(cc, DataRowVersion.Current)
- End If
- Next c
- Else
- fs.Close() : Return False
- End If
- Next r
- For r As Integer = 0 To dt.Rows.Count - 1
- If dt.Rows(r).RowState = DataRowState.Added Then
- .Rows.Add(dt.Rows(r).ItemArray)
- End If
- Next r
- fs.Close()
- .WriteXml(xmldaten, XmlWriteMode.WriteSchema)
- dt.AcceptChanges()
- End With
- Return True
- End Function
Für jede Hilfe bin ich Dankbar.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Andy2002“ ()