Member 14969271 Ответов: 1

Отображение значений нескольких CSV-файлов в datagridview после действия multiselect (VB.NET)


Я-новый человек. VB.net новичок. В настоящее время я обнаружил некоторые проблемы с отображением значения нескольких CSV-файлов после действия multiselect. Я выполнил действие multiselect и смог выбрать несколько CSV-файлов. Однако я не могу отобразить значения нескольких CSV-файлов в DataGridView. В представлении DataGridView отображается только одно значение CSV-файла.

Ниже приведено кодирование, которое было сделано.

Может ли кто - нибудь помочь мне просмотреть и решить мою проблему? Я не знаю, что не так с моим кодом.

Большое спасибо!

Что я уже пробовал:

1. Кнопка Для Выбора Файла
Private Sub btnBrowse_Click(sender As Object, e As EventArgs) Handles btnOpenFile.Click

 OpenFileDialog1.Filter = "csv files|; *.csv"
 OpenFileDialog1.Title = "Select multiple CSV Files"
 OpenFileDialog1.FileName = ""
 OpenFileDialog1.Multiselect = True
 OpenFileDialog1.RestoreDirectory = True
 OpenFileDialog1.FilterIndex = 2

 If (OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
     For j = 0 To OpenFileDialog1.FileNames.GetUpperBound(0)
         Try
             'FileName in textbox
             FILENAME = OpenFileDialog1.FileNames(j)
             Me.txt1.Text += FILENAME

             'File data
             For k As Integer = 0 To OpenFileDialog1.FileNames.Count
                 Dim textLine As String = ""
                 Dim sp() As String
                 If System.IO.File.Exists(FILENAME) = True Then

                     Dim Contents = IO.File.ReadAllLines(FILENAME).ToString

                     Dim sr As New System.IO.StreamReader(FILENAME)

                     dt = BuildDataTable(FILENAME, ";")
                     DS = New DataSet()
                     DS.Tables.Add(dt)
                     DataGridView1.DataSource = dt

                     Do
                         Do While sr.EndOfStream And sr.Peek() <> -1
                             textLine = sr.ReadLine()
                             sp = Split(textLine, ";")
                             Me.DataGridView1.Rows.Add(sp)

                         Loop
                     Loop
                 Else
                     txt1.Text = "Error"
                 End If
             Next
         Catch ex As Exception


         End Try

     Next
     MsgBox(OpenFileDialog1.FileNames.Count & " files had been loaded")

 End If
End Sub


2. Постройте Datatable
Private Function BuildDataTable(ByVal fileFullPath As String, ByVal separator As Char) As DataTable Dim dt As DataTable = New DataTable("Table") Dim dr As DataRow Dim fieldValues As String() Dim f As IO.File = Nothing Dim j As Integer

 'Dim sr As New IO.StreamReader(fileFullPath, System.Text.Encoding.Default)
 Dim sr As New IO.StreamReader(FILENAME, System.Text.Encoding.Default)

 For k As Integer = 0 To OpenFileDialog1.FileNames.Count
     Dim sline As String = ""
     Do
         sline = sr.ReadLine
         If sline Is Nothing Then Exit Do
         Dim thecolumns() As String = sline.Split(",")
         Dim newRow As DataRow = dt.NewRow
         newRow("A") = thecolumns(0)
         newRow("B") = thecolumns(1)
         newRow("C") = thecolumns(2)
         newRow("D") = thecolumns(3)
         newRow("E") = thecolumns(4)
         newRow("F") = thecolumns(5)
         newRow("G") = thecolumns(6)
         newRow("H") = thecolumns(7)
         newRow("I") = thecolumns(8)
         newRow("J") = thecolumns(9)
         newRow("K") = thecolumns(10)
         dt.Rows.Add(newRow)

     Loop
     sr.Close()
 Next
End Function


3. Свойства формы

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load With dt .Columns.Add("A", System.Type.GetType("System.String")) .Columns.Add("B", System.Type.GetType("System.String")) .Columns.Add("C", System.Type.GetType("System.String")) .Columns.Add("D", System.Type.GetType("System.String")) .Columns.Add("E", System.Type.GetType("System.String")) .Columns.Add("F", System.Type.GetType("System.String")) .Columns.Add("G", System.Type.GetType("System.String")) .Columns.Add("H", System.Type.GetType("System.String")) .Columns.Add("I", System.Type.GetType("System.String")) .Columns.Add("J", System.Type.GetType("System.String")) .Columns.Add("K", System.Type.GetType("System.String")) End With

End Sub


4. Кнопка для отображения данных
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim sr As New IO.StreamReader(FILENAME, System.Text.Encoding.Default) Dim sline As String = "" Dim values As String() Dim n As Integer = 0

 Do
     sline = sr.ReadLine
     If sline Is Nothing Then Exit Do
         Dim thecolumns() As String = sline.Split(",")
         Dim newRow As DataRow = dt.NewRow
         newRow("A") = thecolumns(0)
         newRow("B") = thecolumns(1)
         newRow("C") = thecolumns(2)
         newRow("D") = thecolumns(3)
         newRow("E") = thecolumns(4)
         newRow("F") = thecolumns(5)
         newRow("G") = thecolumns(6)
         newRow("H") = thecolumns(7)
         newRow("I") = thecolumns(8)
         newRow("J") = thecolumns(9)
         newRow("K") = thecolumns(10)
         dt.Rows.Add(newRow)
     DataGridView1.DataSource = dt

 Loop
 sr.Close()
End Sub 
End Class

1 Ответов

Рейтинг:
9

CHill60

Вы создаете новый datatable для каждого файла, что нормально, но вы делаете источник данных для DataGridView, который datatable.
Попробуй пошевелиться

DS = New DataSet()
вне цикла, который повторяется через ваши файлы. Добавьте datatable в этот набор данных для каждого файла, а затем используйте эти данныеНабор в качестве источника данных для вашего DataGridView