数组结果到DataGridView

时间:2016-07-08 20:09:29

标签: vb.net

我需要用该函数的结果填充DataGridView。

此函数计算指示目录中每个文件的行数,但我需要具体知道每个文件的行数。

因此,而不是msgbox显示我希望用该信息填充数据网格的总行数。

我一直在做这个没有太多的vb.net知识或编码,所以任何帮助将不胜感激

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这里是编辑过的代码:

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

1 个答案:

答案 0 :(得分:1)

这样的事情应该有用......

很抱歉,您需要决定在循环中使用它们时添加列和行的位置,或者预先定义它们,并在添加每个新行时添加数据。显然不要在循环内调暗数据表。

        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

然后将其绑定到DataGridView

DataGridView1.DataSource = Results1

更新,试试这样......

在函数开头添加....

Public Function GetLineCount() As DataTable 
      Results1.Columns.Add(0) 
      Results1.Columns.Add(1) 

然后在这个循环中添加其他Row值......

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
不要忘记更改函数末尾的返回值....

Return Results1