我对VB.net完全陌生并且已经完成了家庭作业。我需要能够读取某些行并在DataGridView中显示它们。我已经能够将我的.txt文件链接到DGV,但是它读取整个文件而不是特定的行。我有4个按钮:btn1,btn2,btn3,btn4。我希望每个按钮显示文本文件中的相应行。在过去一周上线研究后,我仍然坚持下去。如果有人能帮助我,我会非常感激。
文本文件(" database.txt")
(Line1)c1 c2 c3
(Line2)1 1-1 1-2
(Line3)两个2-2 2-3
(Line4)三3-2 3-3
(Line5)四个4-2 4-3
Public Class Form1
Private Sub btn1_Click(sender As Object, e As EventArgs) Handles btn1.Click
Dim lines = (From line In IO.File.ReadAllLines("database.txt") _
Select line.Split(CChar(vbTab))).ToArray
For x As Integer = 0 To lines(0).GetUpperBound(0)
DataGridView1.Columns.Add(lines(0)(x), lines(0)(x))
Next
For x As Integer = 1 To lines.GetUpperBound(0)
DataGridView1.Rows.Add(lines(x))
Next
End Sub
End Class
答案 0 :(得分:0)
你没有描述你得到的结果,所以我现在无法分辨出什么是错的,因为我不在电脑上并且通常使用c ++ / cli(visual c ++)。如果我必须猜测,我会说你将每个文件行填充到一个DGV行,但你只需要1行,而不是全部。正确的吗?
无论如何,这里有一些建议:
dim lines
拆分为3行或更多行,以使其更具可读性。也有助于调试。 答案 1 :(得分:0)
我根据您在问题中的内容做出以下假设:
(Line#)
仅供参考,不在实际档案中btn#
)中的数字是应在DGV中显示的行索引我在表单中添加了一个新按钮,用于加载文本文件中的数据,将其解析为数据表并将DataGridView1.DataSource
设置为该DataTable。然后,第二种方法创建一个新的数据表,并从主数据表中导入指定的行,并在DGV中显示它。当然,很多人会说你应该使用DataView
DataView.RowFilter
而不是创建一个新的数据表,但这种方式是一样的。
Private txtDataTable As DataTable
Private Sub loadFileBtn_Click(sender As Object, e As EventArgs) Handles loadFileBtn.Click
txtDataTable = New DataTable("txtContents")
Dim txtContents As String()
Try
txtContents = IO.File.ReadAllLines("C:\StackOverflow\database.txt")
Catch ex As Exception
MsgBox(ex.Message)
Return
End Try
Dim txtLines As New List(Of String())
txtContents.ToList().ForEach(Sub(x) txtLines.Add(x.Split(CChar(vbTab))))
If txtLines.Count > 0 Then
txtLines.Item(0).ToList.ForEach(Sub(x) txtDataTable.Columns.Add(New DataColumn(x.ToString)))
txtLines.RemoveAt(0)
End If
If txtLines.Count > 0 Then
txtLines.ToList.ForEach(Sub(x) txtDataTable.Rows.Add(x.ToArray))
End If
DataGridView1.DataSource = txtDataTable
End Sub
Private Sub btn_Click(sender As Object, e As EventArgs) Handles btn1.Click, btn2.Click, btn3.Click, btn4.Click
If txtDataTable Is Nothing Then Return
Dim rowIndex As Integer
If Integer.TryParse(DirectCast(sender, Button).Name.Replace("btn", String.Empty), rowIndex) Then
rowIndex -= 1
Else
Return
End If
Dim TempTable As DataTable = txtDataTable.Clone
If rowIndex < txtDataTable.Rows.Count Then
TempTable.ImportRow(txtDataTable.Rows(rowIndex))
End If
DataGridView1.DataSource = TempTable
End Sub