2011-08-17 162 views
6

我有一個openFileButton,點擊後,會打開一個類似如下的文件:把一個.txt文件到一個DataGridView

RefDeg Part#  Xcntr Ycntr Rot PkgStyle 
U6  IC-00279G 33.411 191.494 0 QFP32  
U1  IC-00272G 38.011 200.644 90 BGA177  
U5  IC-00273G 46.311 179.494 0 QFP40  
R54  EXCLUDES 36.411 173.694 0 0402_2  
R71  EXCLUDES 38.236 186.994 0 0402_2  
R39  EXCLUDES 38.861 188.544 90 0402_2  
C23  CAP-00130G 37.911 178.854 90 0402_3  
C88  CAP-00010G 52.036 179.019 0 0603_4  
C89  CAP-00010G 43.561 173.744 90 0603_3  
X1  XTL-00013G 49.211 204.819 0 Crystal 
X2  XTL-00012G 53.061 183.469 0 Crystal 
D1  LED-00011G 58.611 181.394 0 LED  
U10  IC-00198G 56.661 205.744 0 SOT  
     IC-00173G 59.911 205.744 0 SOT23-5 
U2  IC-00274G 51.786 199.044 0 VFBGA  
Q1  Excludes 43.147 189.769 0 MOSFET  
U4  IC-00167G 59.211 177.394 0 SOT235_2 
FID1 FIDUCIAL 5.080 24.130 0 FIDUCIAL 
     FIDUCIAL 59.586 192.944 0 FIDUCIAL 

當文件被選擇並打開我想放/進口.txt文件行變爲DataGridView,然後將每列轉換爲DataGridView中同一行上的新列。

有沒有人知道一個簡短的方法來做到這一點?

回答

3

你可以分割線和迴路中的所有行/列生成DataTable:

var fileName = this.OpenFileDialog1.FileName; 
var rows = System.IO.File.ReadAllLines(fileName); 
Char[] separator = new Char [] {' '}; 
DataTable tbl = new DataTable(fileName); 
if (rows.Length != 0) { 
    foreach (string headerCol in rows(0).Split(separator)) { 
     tbl.Columns.Add(new DataColumn(headerCol)); 
    } 
    if (rows.Length > 1) { 
     for (rowIndex = 1; rowIndex < rows.Length; rowIndex++) { 
      var newRow = tbl.NewRow(); 
      var cols = rows(rowIndex).Split(separator); 
      for (colIndex = 0; colIndex < cols.Length; colIndex++) { 
       newRow(colIndex) = cols(colIndex); 
      } 
      tbl.Rows.Add(newRow); 
     } 
    } 
} 

然後將此DataTable用作DataSource的DataGridView。

+0

在newRow(colIndex)= cols(colIndex); – StackTrace

+0

處獲得「方法,委託或事件應爲」錯誤 – StackTrace

+0

I我想我會澄清爲未來的用戶,for循環中的錯誤可以通過聲明colIndex和rowIndex和整數與int,當指向它們在for循環使用方括號[]而不是括號()與行(0 ),應該是行[0]。乾杯蒂姆。 –

0

最簡單的方法是將文本文件導入到DataTable中,然後通過DataSource屬性將DataTable綁定到DataGridView。

你的文件看起來是一個固定寬度或分隔的數據文件。有很多庫可以幫助將這些文件讀取到DataTable中,例如this one over codeproject.com。

這裏是你如何與我上面鏈接化GenericParser做到這一點:

// DataFilePath stores the path + file name of your data file. 
using (var p = new GenericParsing.GenericParserAdapter(DataFilePath)) {   
    // Assumes your data file is fixed width, with the column widths given in the array. 
    p.ColumnWidths = new int[] { 8, 12, 9, 9, 5, 11 }; 
    p.FirstRowHasHeader = true; 
    DataTable dt = p.GetDataTable(); 

    dataGridView1.DataSource = dt; 
} 

請注意,你需要GenericParsing.dll添加爲你的項目的引用。

0

上傳這樣的文件:

private static DataTable OpenTextFile() 
    { 
#if X86 // 32-bit 
     string _connectionStringTemplate = "Driver={{Microsoft Text Driver (*.txt; *.csv)}};Extensions=asc,csv,tab,txt;Persist Security Info=False;Dbq={0}"; 
#else // 64-bit 
     string _connectionStringTemplate = "Driver={{Microsoft Access Text Driver (*.txt, *.csv)}};Dbq={0};Extensions=asc,csv,tab,txt"; 
#endif 

      string connectionString = string.Format(_connectionStringTemplate, @"C:\Temp\"); 

      using (OdbcConnection connection = new OdbcConnection(connectionString)) 
      { 
       string selectAll = string.Format("select * from [{0}]", Path.GetFileName("test.txt")); 

       using (OdbcCommand command = new OdbcCommand(selectAll, connection)) 
       { 
        connection.Open(); 

        DataTable dataTable = new DataTable("txt"); 

        using (OdbcDataAdapter adapter = new OdbcDataAdapter(selectAll, connection)) 
        { 
         //Fills dataset with the records from file 
         adapter.Fill(dataTable); 

         return dataTable; 
        } 
       } 
      } 
     } 

然後,只需將DataTable綁定到你的DataGridView

+0

你能解釋一下怎麼回事?我從來沒有使用DataTable或DataGridView .. :( – theNoobGuy

+0

嗨@theNoobGuy,我認爲如果你是新來的DataTable和GridView對象,我建議有一個快速的谷歌和simeiliarising自己與他們,尤其是DataTable對象,因爲它是關鍵在.Net中處理數據如果有任何關於上面代碼的具體問題,請告訴我。 – openshac