我无法使其工作。我正在尝试使用txt文件中的值填充第2列,并跳过列1中没有值的单元格,但没有跳过文本文件中的数据。将值添加到DGV列时跳过某些单元格
这就是我得到:
和代码,我使用:
Dim fileName = "X:\2013\NKT13\FI-ZL\BU.rev"
Dim lineCount = System.IO.File.ReadAllLines(fileName).Length
Dim lines() = System.IO.File.ReadAllLines(fileName)
For i As Integer = 0 To lineCount
Dim RM001 As String = lines(i).Replace(".", "")
Dim LBS001() As String = RM001.Split(New String() {";"}, StringSplitOptions.None)
On Error Resume Next
Dim Val = LBS001(1)
Dim Val2 = LBS001(2)
If DataGridView1.Rows(i).Cells(1).Value Is Nothing Then
'MsgBox(DataGridView1.Rows(i).Index)
DataGridView1.Rows(i).DefaultCellStyle.BackColor = Color.WhiteSmoke
Else
For Each row As DataGridViewRow In DataGridView1.Rows
DataGridView1.Rows(i).Cells(2).Value = LBS001(0)
Next
End If
Next
在上面的一行代码If DataGridView1.Rows(i).Cells(1).Value Is Nothing
不工作。当该行被替换为一个If DataGridView1.Rows(i).Cells(1).Value = ""
,我得到这个:
这里A201A缺失以及在列1每空行1周的结果将被跳过。 如何使用txt文件中的数据填充第2列,以便仅跳过行而不是结果。
编辑: 我试过别的东西,它在第2列工程的第一个空单元格,但是当涉及到第二个......从阵列跳过一个数据,然后继续正常进行,直到达到另一个空细胞。例如:A201A ... A224A(一切正常)...空白单元格(跳过)... A205正常,但在206单元格中放入A207A。
现在,下面的代码也可以工作,这要感谢Steve。
Dim Dat2() As String = Split(start1(0), Environment.NewLine)
Dim Dat2A() As String = Split(Dat2(0), ";")
Dim Dat2B() As String = Split(Dat2(1), ";")
Dim fileName = "X:\2013\NKT13\FI-ZL\BU.rev"
Dim lineCount = System.IO.File.ReadAllLines(fileName).Length
Dim lines() = System.IO.File.ReadAllLines(fileName)
Dim a As Integer = 0
For x As Integer = 0 To DataGridView1.Rows.Count - 2
If DataGridView1.Rows(x).Cells(1).Value <> "" Then
DataGridView1.Rows(x).Cells(2).Value = Dat2(a)
a += 1
Else
DataGridView1.Rows(x).Cells(2).Value = ""
End If
End If
Next
编辑2: 感谢史蒂夫......我已经改变了代码一点,它的工作原理。唯一的问题是我缺少lineCount
中的两行,我认为是因为每个跳过的DGV行。
Dim fileName = "X:\2013\NKT13\FI-ZL\BU.rev"
Dim lineCount = System.IO.File.ReadAllLines(fileName).Length
Dim lines() = System.IO.File.ReadAllLines(fileName)
MsgBox(lineCount)
Dim i2 As Integer = 0
For i As Integer = 0 To lineCount
Dim RM001 As String = lines(i2).Replace(".", "")
Dim LBS001() As String = RM001.Split(New String() {";"}, StringSplitOptions.None)
On Error Resume Next
Dim Val = LBS001(1)
Dim Val2 = LBS001(2)
If DataGridView1.Rows(i).Cells(1).Value <> "" Then
For Each row As DataGridViewRow In DataGridView1.Rows
DataGridView1.Rows(i).Cells(2).Value = LBS001(0)
Next
i2 += 1
Else
DataGridView1.Rows(i).DefaultCellStyle.BackColor = Color.WhiteSmoke
End If
Next
我仍然得到的结果一样,第一形象。顺便说一句,我意识到我需要另一个数据变量。我在你的答案前几秒钟编辑了我原来的帖子......也许你可以进一步帮助我?谢谢。 – Jovica 2014-08-29 15:45:49
为什么在单元格为空时重置'a = x'。你基本上告诉它做同样的事情。仔细看一下我提供的代码,你会发现我们正在做的事情有很大的不同。 – Steve 2014-08-29 15:57:36
首先,我避免使用DGV进行循环,因为我对编程很陌生,所以我必须查看代码一段时间,直到看到错误。无论如何,我已经试过你的代码,并获得列2中的所有值,但没有跳过行,此行不起作用“DataGridView1.Rows(i2).Cells(1).Value Is Nothing”。此外,我已启用msgbox只是为了测试它,并没有它完全忽略空单元格。 – Jovica 2014-08-29 16:08:11