Hallo!
Du kannst mit den oben erwähnten Methoden
relativ einfach eine Datatable erweitern, diese dann an
ein Datagridview binden und beliebig den Dateiinhalt
editieren, Zeilen und Spalten anfügen usw.
Du kannst die Spalten im Datagridview auch sortieren
lassen und doppelte Einträge einfach markieren und löschen.
Hier ein einfaches - GROB getestetes Demo-Beispiel für
eine derartige Erweiterung der Datatable.
Dem Projekt eine Klasse hinzufügen und den Code eintragen:
Option Strict On : Option Explicit On : Option Infer Off
Public Class cDataTableCSV
Inherits System.Data.DataTable
Public Function LoadFile(ByVal filename As String, _
ByVal textencoder As System.Text.Encoding, _
Optional ByVal FeldTrennzeichen As Char = ";"c, _
Optional ByVal ZeilenTrennzeichen As String = _
Microsoft.VisualBasic.vbNewLine) As Boolean
Me.Rows.Clear() : Me.Columns.Clear()
Try
'Zeilen lesen
Dim lines() As String = _
System.IO.File.ReadAllLines(filename, textencoder)
'Maximale Feldzahl pro Zeile
Dim fields() As String, maxfields As Integer = 0
For i As Integer = 0 To lines.GetUpperBound(0)
If lines(i) <> String.Empty Then
fields = lines(i).Split(FeldTrennzeichen)
maxfields = System.Math.Max(maxfields, fields.Length)
End If
Next i
If maxfields < 1 Then Return False
'Spalten für Felder erstellen
For i As Integer = 0 To maxfields - 1
Me.Columns.Add("SP_" + CStr(i), GetType(String))
'Einige Standardeigenschaften der Spalten
Me.Columns(i).AllowDBNull = True
Me.Columns(i).DefaultValue = String.Empty
Me.Columns(i).ReadOnly = False
Next i
'Datatable: Zeilen füllen
Dim r As System.Data.DataRow
For i As Integer = 0 To lines.GetUpperBound(0)
If lines(i) <> String.Empty Then
fields = lines(i).Split(FeldTrennzeichen)
System.Array.Resize(fields, maxfields)
r = Me.NewRow
For k As Integer = 0 To maxfields - 1
If String.IsNullOrEmpty(fields(k)) Then
r(k) = String.Empty
Else
r(k) = fields(k).Trim
End If
Next k 'Felderschleife
Me.Rows.Add(r)
End If
Next i
Return Me.Rows.Count > 0
Catch ex As System.Exception
Return False
End Try
End Function
Public Function SaveFile _
(ByVal Filename As String, ByVal Feldtrennzeichen As Char) As Boolean
If Me.Rows.Count < 1 Then Return False
Try
Dim lines(Me.Rows.Count - 1) As String
Dim fields(Me.Columns.Count - 1) As String
For i As Integer = 0 To Me.Rows.Count - 1
'Felder aus der Table zusammenstellen
For k As Integer = 0 To Me.Columns.Count - 1
fields(k) = CType(Me.Rows(i).Item(k), String)
Next k
'Felder zusammenfügen
lines(i) = System.String.Join(Feldtrennzeichen, fields)
'Leere Spalten am Zeilenende entfernen
While lines(i).EndsWith(Feldtrennzeichen)
lines(i) = lines(i).Substring(0, lines(i).Length - 1)
End While
Next i
'Datei füllen
System.IO.File.WriteAllLines(Filename, lines)
Return True
Catch ex As System.Exception
Return False
End Try
End Function
Public Sub AddColumn()
Dim k As Integer = Me.Columns.Count
Dim cn As String = "SP_" & CStr(k)
Me.Columns.Add(cn, GetType(String))
For i As Integer = 0 To Me.Rows.Count - 1
Me.Rows(i).Item(k) = String.Empty
Next i
End Sub
End Class Verwendung:
Dim dx as cDataTableCSV 'am besten formular-global
dx = New cDataTableCSV
If Not dx.LoadFile(Dateipfad, System.Text.Encoding.Default) Then Stop
DataGridView1.DataSource = dx
Um eine weitere Spalte anzufügen:
dx.AddColumn
Weitere Zeilen können einfach im DataGrid angefügt werden.
Alle Änderungen werden sofort in die Datatable eingetragen.
Um die (editierten) Daten in der Table zu speichern ...
If Not dx.SaveFile(Datei-Pfad) Then Stop
Beitrag wurde zuletzt am 27.03.10 um 22:13:09 editiert. |