2011-08-17 55 views
6

ho un openFileButton che, se cliccato, si aprirà un file che assomiglia a questo:Mettere un file .txt in un 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 

Quando è selezionato e ha aperto vorrei mettere il file/import la riga di file .txt in un DataGridView e quindi ogni colonna in una nuova colonna sulla stessa riga in DataGridView.

Qualcuno sa un modo breve e veloce per farlo?

risposta

3

Si potrebbe dividere le linee e ciclo tutte le righe/colonne per generare il 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); 
     } 
    } 
} 

Quindi utilizzare questo DataTable come origine dati per DataGridView.

+0

Ottenere l'errore "Metodo, Delega o Evento previsto" a newRow (colIndex) = cols (colIndex); – StackTrace

+0

Capito. – StackTrace

+0

I pensavo che avrei chiarito per i futuri utenti che gli errori nei cicli for possono essere risolti dichiarando colIndex e rowIndex e interi con int e quando puntano a loro nei loop for usano le parentesi quadre [] invece di parentesi() come con le righe (0), dovrebbe essere righe [0]. Cheers Tim. –

0

Il modo più semplice sarebbe importare il file di testo in un DataTable e quindi associare DataTable a DataGridView tramite la proprietà DataSource.

Il file sembra un file di dati a larghezza fissa o delimitato. Ci sono un sacco di librerie che potrebbero aiutare a leggere tali file in un DataTable, per esempio this one su codeproject.com mi viene in mente.

Ecco come si farebbe con il GenericParser ho linkato sopra:

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

Si noti che è necessario aggiungere GenericParsing.dll come riferimento nel progetto.

0

Carica il file in questo modo:

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

Poi basta associare il DataTable al DataGridView

+0

Potresti spiegare cosa sta succedendo un po 'di più? Non ho mai usato un DataTable o un DataGridView .. :( – theNoobGuy

+0

Ciao @theNoobGuy, penso che se sei nuovo sull'oggetto DataTable e GridView ti consiglio di avere un veloce Google e di familiarizzare con loro, specialmente l'oggetto DataTable in quanto è fondamentale per gestire i dati in .Net Se ci sono delle domande specifiche sul codice di cui sopra fammelo sapere – openshac