Winforms-Beispiel / ein geeigneter Stammordner muss angegeben werden
Ein Filter beim Enum(m)erieren der Dateien könnte gesetzt werden (*.txt)
Public Class frmFoldersAndFiles
Dim basefolder As String = "C:\xxxxx" 'Basisordner angeben
Dim dtFolders, dtFiles As DataTable
Dim bsFolders, bsFiles As New BindingSource
Dim WithEvents dgvFolders, dgvFiles As New DataGridView
Dim dsFoldersFiles As DataSet
Dim tboFileContent As New TextBox With
{.Parent = Me, .Left = 10, .Top = 320, .Height = 150, .Width = 600,
.Multiline = True}
Private Sub frmFoldersAndFiles_Load(sender As Object,
e As EventArgs) Handles MyBase.Load
Me.FormBorderStyle = FormBorderStyle.Fixed3D
Me.Size = New Size(700, 560)
With dgvFolders
.Size = New Size(300, 300)
.Location = New Point(10, 10)
.DataSource = bsFolders
.Parent = Me
End With
With dgvFiles
.Size = dgvFolders.Size
.Location = New Point(320, 10)
.DataSource = bsFiles
.Parent = Me
End With
Me.Show()
CreateFilesAndFolders()
End Sub
Private Sub dgvFiles_RowHeaderMouseClick(sender As Object,
e As DataGridViewCellMouseEventArgs) Handles _
dgvFiles.RowHeaderMouseClick
'Anzeige einer Textdatei beim Click auf den Zeilenkopf des Grid mit
' Dateien
'(kann man besser machen)
Dim row As DataGridViewRow = dgvFiles.Rows.Item(e.RowIndex)
Dim folderid As Integer = CInt(row.Cells("FolderID").Value)
Dim foldername As String =
dgvFolders.Rows.Item(folderid - 1).Cells("Subfolder").Value.ToString
Dim filename As String =
IO.Path.Combine(basefolder, foldername, row.Cells( _
"Filename").Value.ToString)
Try
tboFileContent.Text = IO.File.ReadAllText(filename)
Me.Text = IO.Path.GetFileName(filename)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Function CreateFilesAndFolders()
dtFiles = New DataTable : dtFolders = New DataTable
'Tabellenspalten erstellen
With dtFolders
.TableName = "folders"
.Columns.Add("ID", GetType(Integer))
.Columns.Add("Subfolder", GetType(String))
End With
With dtFiles
.TableName = "files"
.Columns.Add("ID", GetType(Integer))
.Columns.Add("FolderID", GetType(Integer))
.Columns.Add("Filename", GetType(String))
End With
'Filesystem-Daten in die Tabellen einlesen
Dim folderid, fileid As Integer, subfolder As String
For Each fld As String In
IO.Directory.GetDirectories(basefolder, "*.*", _
IO.SearchOption.TopDirectoryOnly)
folderid += 1
subfolder = fld.Replace(basefolder, "").Replace("\", "")
dtFolders.Rows.Add(folderid, subfolder)
For Each file As String In
IO.Directory.EnumerateFiles(fld, "*.*", _
IO.SearchOption.TopDirectoryOnly)
fileid += 1
dtFiles.Rows.Add(fileid, folderid, IO.Path.GetFileName(file))
Next file
Next fld
'Dataset zusammenstellen
dsFoldersFiles = New DataSet
With dsFoldersFiles.Tables
.Add(dtFolders)
.Add(dtFiles)
End With
'Datarelation für Master->Child
Dim pc As DataColumn = dtFolders.Columns("ID")
Dim cc As DataColumn = dtFiles.Columns("FolderID")
dsFoldersFiles.Relations.Add("FoldersFiles", pc, cc)
'Parent-Child-Koordination
bsFolders.DataSource = dsFoldersFiles
bsFolders.DataMember = "Folders"
bsFiles.DataMember = "FoldersFiles"
bsFiles.DataSource = bsFolders
'nach Belieben .....
dgvFolders.Columns("ID").Visible = False
dgvFiles.Columns("FolderID").Visible = False
End Function
End Class |