2011-08-17 18 views
6

Ben tıklandığında, şöyle bir dosyayı açacak bir openFileButton:bir DataGridView bir .txt dosyası koyarak

dosya seçilir ve ben koymak istiyorum açıldığında
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 

/ithalat .txt dosyaları, DataGridView satırına ve ardından her sütunu DataGridView'da aynı satırdaki yeni bir sütuna dönüştürür.

Bunu yapmanın hızlı bir yolu bilen biri var mı?

cevap

3
Sen hatları ve döngü her satır/sütun bölünmüş olabilir

DataTable üretmek için:

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); 
     } 
    } 
} 

Daha sonra bu DataTable'ı DataGridView'ınız için DataSource olarak kullanın.

+0

"Metot, Temsilci veya Olay bekleniyor" hatası, newRow (colIndex) = cols (colIndex) = – StackTrace

+0

Şekil 1 – StackTrace

+0

gelecekteki kullanıcılar için, döngülerdeki hataların colIndex ve rowIndex ve tamsayıların int ile bildirilmesiyle düzeltilebileceğini düşündüm ve döngüler için onlara işaret ederken köşeli parantez yerine [] köşeli parantez() yerine [0]), satırlar olmalı [0]. –

0

En kolay yol, metin dosyasını DataTable içine almak ve DataTridView DataSource özelliği üzerinden DataGridView bağlamaktır.

Dosya, sabit genişlikli veya ayrılmış bir veri dosyası gibi görünüyor. Bu tür dosyaları bir DataTable içine okumaya yardımcı olacak çok sayıda kütüphane vardır, örneğin codeproject.com'da this one üzerinden akla gelir. İşte

Eğer yukarıda bağlantılı GenericParser ile yapacağını nasıl: Eğer projede bir başvuru olarak GenericParsing.dll eklemeniz gerekir

// 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; 
} 

Not.

0

böyle dosyası yükleyin:

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; 
        } 
       } 
      } 
     } 

Sonra sadece DataGridView DataTable bağlamak

+0

Biraz daha neler olup bittiğini açıklar mısınız? DataTable veya DataGridView hiç kullanmadım .. :( – theNoobGuy

+0

Merhaba @ TheNoobGuy, DataTable ve GridView nesnesinde yeniyseniz, hızlı bir Google'a sahip olmanızı ve kendileriyle, özellikle de Net ile ilgili herhangi bir özel soru varsa, yukarıdaki kodla ilgili bilgi varsa bana bildirin: – openshac

İlgili konular