将.txt文件放入DataGridView

时间:2011-08-17 15:25:39

标签: c# datagridview text-files

我有openFileButton,点击后会打开一个如下所示的文件:

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中同一行的新列。< / p>

有没有人知道这么做的简短方法?

4 个答案:

答案 0 :(得分: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用作DataGridView的DataSource。

答案 1 :(得分:0)

最简单的方法是将文本文件导入DataTable,然后通过DataSource属性将DataTable绑定到DataGridView。

您的文件看起来是固定宽度或分隔数据文件。有很多库可以帮助将这些文件读入DataTable,例如this one在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作为参考。

答案 2 :(得分:0)

您可以使用DataSource和Microsoft文本文件驱动程序。

http://www.connectionstrings.com/textfile

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

答案 3 :(得分: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