2011-08-17 282 views
6

tengo una openFileButton que, cuando se hace clic, se abrirá un archivo que tiene el siguiente aspecto:Poner un archivo .txt en 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 

Cuando se selecciona el archivo y abrió quisiera poner/importación los archivos .txt se alinean en un DataGridView y luego cada columna en una nueva columna en la misma línea en el DataGridView.

¿Alguien conoce una forma rápida y corta de hacer esto?

Respuesta

3

Se podría dividir las líneas y bucle de todas las filas/columnas para generar la 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); 
     } 
    } 
} 

después utilizar esta DataTable como origen de datos para su DataGridView.

+0

Primeros "Método, Delegado o evento se espera" error en newRow (colIndex) = cols (colIndex);. – StackTrace

+0

lo descubrió – StackTrace

+0

I. pensé que aclararía para los futuros usuarios que los errores en los bucles for se pueden solucionar declarando colIndex y rowIndex y enteros con int y al señalarlos en los bucles for usar llaves cuadradas [] en lugar de corchetes() como con filas (0), deberían ser filas [0]. Saludos Tim. –

0

La forma más fácil sería para importar el archivo de texto en un DataTable y luego obligar a la DataTable a un DataGridView a través de la propiedad DataSource.

archivo Usted parece ser un ancho fijo o archivo de datos delimitado. Hay muchas bibliotecas que ayudarían a leer tales archivos en una DataTable, por ejemplo, en this one en codeproject.com.

Así es como lo haría con el GenericParser he vinculado anteriormente:

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

Tenga en cuenta que tendrá que añadir GenericParsing.dll como referencia en su proyecto.

0

Sube el archivo de la siguiente manera:

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

A continuación, sólo obligar a la DataTable a su DataGridView

+0

¿Podría explicarnos qué está pasando un poco más? Nunca he utilizado un DataTable o un DataGridView .. :( – theNoobGuy

+0

Hola @theNoobGuy, creo que si usted es nuevo en el objeto DataTable y GridView Es recomendable tener una rápida Google y samiliarising con ellas, esp. El objeto DataTable ya que es crítico para el manejo de datos en .Net Si hay alguna pregunta específica sobre el código anterior que me haga saber – openshac

Cuestiones relacionadas