The problem is you are not tracking the 'added row' index right.
You are always over writing the same row - the 'add row' pushes the current row to the next line.
Simply putting
CODE
nRow = grdTest.Rows.Add(1)
and removing the
CODE
nRow = nRow + 1
instead of
CODE
grdTest.Rows.Add(1)
and incrementing it yourself fixes your issue.
Here's my code for the solution - a bit more robust.
CODE
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim objReader As New StreamReader("c:\test.txt")
Dim strLine As String
Dim strArry As New ArrayList()
Dim i As Integer = 0
Do
strLine = objReader.ReadLine
If Not strLine Is Nothing Then
strArry.Add(strLine)
i = i + 1
End If
Loop Until strLine Is Nothing
'-- --
Dim lCurrentColumn As Int32 = 0
Dim lStart As Int32 = 0
Dim lAddedRow As Int32 = 0
For Each tempLine As String In strArry
lAddedRow = Me.grdTest.Rows.Add(1)
lCurrentColumn = 0
lStart = 0
For a As Int32 = 0 To tempLine.Count - 1
If tempLine(a) = "|" Then
grdTest.Rows(lAddedRow).Cells(lCurrentColumn).Value = tempLine.Substring(lStart, a - lStart)
lCurrentColumn += 1
lStart = a + 1
End If
Next
Next
End Sub