我需要用该函数的结果填充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
答案 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