2015-04-27 73 views
0

我有一個項目,我想要將文本文件加載到DataGridview
數據:如何讀取文本文件到Datagridview

"#Tools Must You Have 
Tool_1 Screwdriver T1  
Tool_2 Screw T2 
Tool_3 Ruler T3" 

我有兩個按鈕(btSave & btOpen)和DataGridview有兩列(Tools & Name
我希望將數據讀取到DataGridview,但我想跳過開頭行「#

我這個代碼

試了一下

這段代碼是錯誤的,當它的加載,在列文是不一樣的,只讀一個字「Screwdriver」而不是「screwdriver T1」,
這方面的任何解決方案?

回答

0

當你運行這個分割函數時,你在每個空間分割整個字符串,所以你最終得到3長陣列,並且T1在第三個字符串中。我假設你的表只有兩列定義。試試這個:

Do While objReader.Peek() <> -1 
     TextLine = objReader.ReadLine() 
     If Textline.Trim.Length > 0 AndAlso not TextLine.StartsWith("#") Then 
      DataGridView1.Rows.Add(TextLine.Split(" ")(0), textLine.Replace(TextLine.Split(" ")(0), "").Substring(1)) 
     End If 
    Loop 

真的,我做你的任務,你的數據假設形形色色,但是這應該讓你在正確的方向前進。

+0

這是錯誤「字符串不能爲零長度。」當我加載數據時,「#Tools Must You Have」,首先我想忽略那些文本。 –

+0

我不是很瞭解這個錯誤。在將線添加到網格的線上放置一個斷點,並查看此時TextLine等於什麼。另外,請參閱上述更改以篩選出第一行數據。 (ETA:我添加了長度過濾器,以防數據的開始或結束處出現空白行,這些行實際上會導致報告的錯誤。) – clweeks

1
Private Sub LoadGridData(ByVal ThisGrid As DataGridView, ByVal Filename As String) 
    ThisGrid.Rows.Clear() 
    ThisGrid.Rows.AddRange( 
     File.ReadLines(FileName). 
       Where(Function(line) Not line.TrimStart().StartsWith("#")). 
       Select(Function(line) line.Split(" ".ToCharArray(), 2)). 
       ToArray() 
    ) 
End Sub 

注(除其他事項外)本次變動從ByRefByVal。很容易錯過那個,而ByRefByVal可能並不意味着你的想法。請記住,VB.Net中的ByVal仍然通過引用。區別在於它使拷貝的引用值,但由於該拷貝仍然引用相同的DataGridView對象,所以它會做你想做的事情。您應該使用ByRef的唯一時間是如果您需要直接對變量進行賦值,並且您希望該賦值顯示在調用代碼中。這與分配給對象的屬性不同。如果你想實際替換整個對象,那麼你只需要這個,而這應該幾乎不會。