2014-08-29 83 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

相關問題