2011-08-17 196 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