一次将三个文本文件添加到三个数据网格视图中

问题描述 投票:0回答:1

在我的文件夹中全部选择三个文本文件后,我想立即将三个文本文件加载到三个数据网格视图中。我希望它自动将我突出显示的三个文本文件一起加载到三个数据网格视图中。我已经使用 VB.NET 在我的表单中创建了。

Private Sub PictureBox1_Click_1(sender As Object, e As EventArgs) Handles PictureBox1.Click
     If OpenFileDialog1.ShowDialog = System.Windows.Forms.DialogResult.OK _
Then
          DataGridView1.Rows.Clear()
          For Each Line In My.Computer.FileSystem.ReadAllText(OpenFileDialog1.FileName).Split(Environment.NewLine)
              DataGridView3.Rows.Add(Split(Line, ControlChars.Tab))
              DataGridView2.Rows.Add(Split(Line, ControlChars.Tab))
              DataGridView1.Rows.Add(Split(Line, ControlChars.Tab))
          Next

     End If
End Sub
vb.net winforms datagridview
1个回答
0
投票

您需要迭代 openFileDialog 返回的文件数组。

此外,最好将代码分割成更小的单元,因为这样更容易调试和维护。

我在窗体上放置了一个按钮和三个 DataGridView 控件,并使用了以下代码:

Imports System.IO

Public Class Form1

    Function GetDataFiles() As String()
        Using ofd As New OpenFileDialog() With {.InitialDirectory = "C:\Temp",
                                                .DefaultExt = ".csv",
                                                .Multiselect = True,
                                                .Title = "Select 3 files"}

            If ofd.ShowDialog = DialogResult.OK Then
                Return ofd.FileNames
            End If

        End Using

        Return Array.Empty(Of String)

    End Function

    Sub LoadData()
        Dim nFiles = 3

        Dim srcFiles = GetDataFiles().Take(nFiles)

        If srcFiles.Count <> nFiles Then
            ' Probably need to ask user to select nFiles files.
            Exit Sub
        End If

        'TODO: Maybe find a better way of getting the DGVs.
        Dim dgvs = {DataGridView1, DataGridView2, DataGridView3}

        For i = 0 To nFiles - 1
            'TODO: Possibly read the files first to get the number of columns.
            Dim nCols = 4
            Dim dt = New DataTable()
            For j = 1 To nCols
                dt.Columns.Add($"DT{i}-Col{j}")
            Next

            Dim data = File.ReadAllLines(srcFiles(i)).Where(Function(s) Not String.IsNullOrEmpty(s))

            For Each s In data
                dt.Rows.Add(s.Split(ControlChars.Tab))
            Next

            dgvs(i).DataSource = dt

        Next

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        LoadData()

    End Sub

End Class
© www.soinside.com 2019 - 2024. All rights reserved.