2014-08-29 31 views
0

我无法使其工作。我正在尝试使用txt文件中的值填充第2列,并跳过列1中没有值的单元格,但没有跳过文本文件中的数据。将值添加到DGV列时跳过某些单元格

这就是我得到:

enter image description here

和代码,我使用:

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 = "",我得到这个:

enter image description here

这里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 

回答

1

你现在正在做的是使用i读取线和i写信给你的网格。您需要的是另一个变量,如i2,当您在网格中设置值时需要手动增加,或者需要跳过网格中的一行。

Dim i2 as Int32 = 0 
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(i2).Cells(1).Value Is Nothing Then 
    'MsgBox(DataGridView1.Rows(i2).Index) 
    DataGridView1.Rows(i2).DefaultCellStyle.BackColor = Color.WhiteSmoke 
    Else 
    For Each row As DataGridViewRow In DataGridView1.Rows 
     DataGridView1.Rows(i2).Cells(2).Value = LBS001(0) 
    Next 
    i2 += 1 
    End If 
Next 

编辑:由OP进一步审查和修改后,这是一个更好的答案:

Dim fileName = "X:\2013\NKT13\FI-ZL\BU.rev" 
Dim lines() = System.IO.File.ReadAllLines(fileName) 
Dim lineCount = lines.Length 
Dim a As Integer = 0 
For x As Integer = 0 To DataGridView1.Rows.Count - 1 
    If DataGridView1.Rows(x).Cells(1).Value <> "" Then 
     DataGridView1.Rows(x).Cells(2).Value = lines(a) 
     a += 1 
    Else 
     DataGridView1.Rows(x).Cells(2).Value = ""   
    End If 
Next 
+0

我仍然得到的结果一样,第一形象。顺便说一句,我意识到我需要另一个数据变量。我在你的答案前几秒钟编辑了我原来的帖子......也许你可以进一步帮助我?谢谢。 – Jovica 2014-08-29 15:45:49

+0

为什么在单元格为空时重置'a = x'。你基本上告诉它做同样的事情。仔细看一下我提供的代码,你会发现我们正在做的事情有很大的不同。 – Steve 2014-08-29 15:57:36

+0

首先,我避免使用DGV进行循环,因为我对编程很陌生,所以我必须查看代码一段时间,直到看到错误。无论如何,我已经试过你的代码,并获得列2中的所有值,但没有跳过行,此行不起作用“DataGridView1.Rows(i2).Cells(1).Value Is Nothing”。此外,我已启用msgbox只是为了测试它,并没有它完全忽略空单元格。 – Jovica 2014-08-29 16:08:11

相关问题