F Rez F Rez - 4 months ago 39
Vb.net Question

Array result into DataGridView

I need to fill a DataGridView with the results of that function.

This function counts the lines of every file in the directory indicated, but I need to know specifically how many lines per file.

So instead of that msgbox showing the total number of lines I would like to fill the datagrid with that information.

I've been doing this without much vb.net knowledge or coding whatsoever, so any help would be greatly appreciated

Imports System
Imports System.Collections
Imports System.Linq
Imports System.IO
Imports System.IO.StreamReader
Imports System.IO.FileInfo
Imports System.IO.DirectoryInfo

Public Class Form1

'/ this function returns the count of code lines
'FileNames holds the names of files in the project directories
Protected FileNames As New ArrayList(200)

' it returns filenames in the project
Public ReadOnly Property FilesInProject() As ArrayList
Get
Return FileNames
End Get
End Property

' this function returns the count of code lines
Public Function GetLineCount() As Integer

Dim LineCount As Integer = 0

' this array holds file types, you can add more file types if you want
Dim myFileArray As [String]() = New [String](6) {"*.txt", "*.doc", "*.docx", "*.odt", "*.pdf", "*.rtf", _
"*.csv"}

' this array holds directories where your project files resides
Dim myDirectoryArray As [String]() = New [String](0) {"c:\test\"}

'this loops directories
For Each sd As [String] In myDirectoryArray
Dim dir As New DirectoryInfo(sd)

' this loops file types
For Each sFileType As [String] In myFileArray

' this loops files
For Each file__1 As FileInfo In dir.GetFiles(sFileType)

' add the file name to FileNames ArrayList
FileNames.Add(file__1.FullName)

' open files for streamreader
Dim sr As StreamReader = File.OpenText(file__1.FullName)

'loop until the end
While sr.ReadLine() IsNot Nothing
LineCount += 1
End While
'close the streamreader
sr.Close()

Next
Next
Next
Return LineCount

End Function

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

Try
MsgBox(GetLineCount)
' i want to put here something like datagridview1.datasource = getlinecount
Catch ex As Exception
MsgBox(ex.Message)
End Try

End Sub

Private Sub DataGridView1_CellContentClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick

End Sub

End Class


@htm11h here is the edited code:

Imports System
Imports System.Collections
Imports System.Linq
Imports System.IO
Imports System.IO.StreamReader
Imports System.IO.FileInfo
Imports System.IO.DirectoryInfo

Public Class Form1

Dim results1 As New DataTable
'/ this function returns the count of code lines
'FileNames holds the names of files in the project directories
Public FileNames As New ArrayList(200)

' it returns filenames in the project
Public ReadOnly Property FilesInProject() As ArrayList
Get
Return FileNames
End Get
End Property

' this function returns the count of code lines
Public Function GetLineCount() As Integer

Dim LineCount As Integer = 0

' this array holds file types, you can add more file types if you want
Dim myFileArray As [String]() = New [String](6) {"*.txt", "*.doc", "*.docx", "*.odt", "*.pdf", "*.rtf", _
"*.csv"}

' this array holds directories where your project files resides
Dim myDirectoryArray As [String]() = New [String](0) {"c:\test\"}

'this loops directories
For Each sd As [String] In myDirectoryArray
Dim dir As New DirectoryInfo(sd)

' this loops file types
For Each sFileType As [String] In myFileArray

' this loops files
For Each file__1 As FileInfo In dir.GetFiles(sFileType)

' add the file name to FileNames ArrayList
FileNames.Add(file__1.FullName)

' open files for streamreader
Dim sr As StreamReader = File.OpenText(file__1.FullName)

'loop until the end
While sr.ReadLine() IsNot Nothing
LineCount += 1
End While
'close the streamreader
sr.Close()

results1.Rows.Add()
results1.Rows(0).Item(0) = "Filename: " & file__1.FullName
results1.Rows(0).Item(1) = "Count: " & LineCount

Next
Next
Next

Return LineCount



End Function


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

Try

DataGridView1.DataSource = GetLineCount()

Catch ex As Exception

MsgBox(ex.Message)

End Try

End Sub

Private Sub DataGridView1_CellContentClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick

End Sub

End Class

Answer

Something like this should work....

Sorry you'll need to decide where to add columns as rows as you use them in your loops or define it up front and just add data as each new row is added. Obviously don't Dim the datatable inside a loop.

        Dim Results1 As New DataTable

        Results1.TableName = "output"
        Results1.Columns.Add(0)
        Results1.Columns.Add(1)
        Results1.Rows.Add()
        Results1.Rows(0).Item(0) = val1
        Results1.Rows(0).Item(1) = val2

        Return Results1

Then just bind it to the DataGridView

DataGridView1.DataSource = Results1

Update, try something like this....

For Each file__1 As FileInfo In dir.GetFiles(sFileType)

    ' add the file name to FileNames ArrayList
    FileNames.Add(file__1.FullName)

    ' open files for streamreader
    Dim sr As StreamReader = File.OpenText(file__1.FullName)

    'loop until the end
     While sr.ReadLine() IsNot Nothing
           LineCount += 1
     End While

     'close the streamreader
     sr.Close()

     Results1.Rows.Add()
     Results1.Rows(0).Item(0) = "Filename: " & file__1.FullName
     Results1.Rows(0).Item(1) = "Count: "  & LineCount 

Next
Comments