2011-08-17 13 views
6

Tôi có một openFileButton rằng, khi nhấn vào, sẽ mở một tập tin đó trông như thế này:Đưa một file .txt vào một 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 

Khi tập tin được lựa chọn và mở Tôi muốn đặt/nhập khẩu dòng tệp .txt vào một DataGridView và sau đó mỗi cột vào một cột mới trên cùng một dòng đó trong DataGridView.

Có ai biết cách nhanh chóng để thực hiện việc này không?

Trả lời

3

Bạn có thể chia dòng và lặp tất cả các hàng/cột để tạo 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); 
     } 
    } 
} 

Sau đó, sử dụng DataTable này làm DataSource cho DataGridView của bạn.

+0

Lỗi "Phương thức, Ủy nhiệm hoặc Sự kiện được mong đợi" tại newRow (colIndex) = cols (colIndex); – StackTrace

+0

Đã tìm ra. – StackTrace

+0

I nghĩ rằng tôi sẽ làm rõ cho người dùng tương lai rằng các lỗi trong vòng lặp có thể được cố định bằng cách khai báo colIndex và rowIndex và số nguyên với int và khi trỏ đến chúng trong vòng lặp sử dụng dấu ngoặc vuông [] thay vì dấu ngoặc vuông() như với hàng (0), nên là hàng [0]. –

0

Cách dễ nhất là nhập tệp văn bản vào một DataTable và sau đó liên kết DataTable với một DataGridView thông qua thuộc tính DataSource.

Tệp của bạn có vẻ là tệp dữ liệu có độ rộng cố định hoặc phân tách. Có rất nhiều thư viện có thể giúp đọc các tệp như vậy vào một DataTable, ví dụ: this one trên codeproject.com.

Đây là cách bạn sẽ làm điều đó với GenericParser tôi liên kết ở trên:

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

Lưu ý rằng bạn sẽ cần phải thêm GenericParsing.dll như một tài liệu tham khảo trong dự án của bạn.

0

Tải lên các tập tin như thế này:

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

Sau đó chỉ cần ràng buộc DataTable để DataGridView bạn

+0

Bạn có thể giải thích điều gì đang xảy ra thêm một chút không? Tôi chưa bao giờ sử dụng một DataTable hay một DataGridView .. :( – theNoobGuy

+0

Xin chào @ theNoobGuy, tôi nghĩ rằng nếu bạn là người mới đối tượng DataTable và GridView, tôi khuyên bạn nên có một Google nhanh chóng và làm quen với họ, đặc biệt là đối tượng DataTable vì nó quan trọng để xử lý dữ liệu trong .Net Nếu có bất kỳ câu hỏi cụ thể nào về mã bên trên, hãy cho tôi biết – openshac