6 Stimmen

Einfügen einer .txt-Datei in eine DataGridView

Ich habe eine openFileButton die, wenn sie angeklickt wird, eine Datei öffnet, die wie folgt aussieht:

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  

Wenn die Datei ausgewählt und geöffnet wird, möchte ich die Zeile der .txt-Datei in eine DataGridView und dann jede Spalte in eine neue Spalte in derselben Zeile in der Datei DataGridView .

Kennt jemand einen schnellen und kurzen Weg, dies zu tun?

3voto

Tim Schmelter Punkte 427304

Sie können die Zeilen aufteilen und eine Schleife über alle Zeilen/Spalten ziehen, um die DataTable zu erstellen:

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

Verwenden Sie dann diese DataTable als DataSource für Ihr DataGridView.

0voto

Jay Riggs Punkte 52013

Am einfachsten wäre es, die Textdatei in eine DataTable zu importieren und dann die DataTable über die DataSource-Eigenschaft an ein DataGridView zu binden.

Ihre Datei scheint eine Datei mit fester Breite oder mit Trennzeichen zu sein. Es gibt zahlreiche Bibliotheken, die beim Einlesen solcher Dateien in eine DataTable helfen, zum Beispiel diese drüben bei codeproject.com in den Sinn.

Hier ist, wie Sie es mit dem GenericParser tun würde ich oben verlinkt:

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

Beachten Sie, dass Sie die Datei GenericParsing.dll als Referenz in Ihr Projekt einfügen müssen.

0voto

Steve Wellens Punkte 20326

Sie können eine DataSource und den Microsoft Text File Driver verwenden.

http://www.connectionstrings.com/textfile

http://www.codeproject.com/KB/database/ReadTextFile.aspx

0voto

openshac Punkte 4647

Laden Sie die Datei wie folgt hoch:

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

Dann binden Sie einfach die DataTable an Ihre DataGridView

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X