Reputation: 1636
I have an openFileButton
that, when clicked, will open a file that looks like this:
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
When the file is selected and opened I would like to put/import the .txt files line into a DataGridView
and then each column into a new column on that same line in the DataGridView
.
Does anyone know a quick short way to do this?
Upvotes: 6
Views: 19923
Reputation: 460288
You could split the lines and loop all rows/columns to generate the 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);
}
}
}
Then use this DataTable as DataSource for your DataGridView.
Upvotes: 3
Reputation: 53603
The easiest way would be to import the text file into a DataTable and then bind the DataTable to a DataGridView via the DataSource property.
You file looks to be a fixed width or delimited data file. There are plenty of libraries that would help read such files into a DataTable, for example this one over at codeproject.com comes to mind.
Here's how you would do it with the GenericParser I linked above:
// 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;
}
Note that you'll need to add GenericParsing.dll as a reference in your project.
Upvotes: 0
Reputation: 5165
Upload the file like this:
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;
}
}
}
}
Then just bind the DataTable to your DataGridView
Upvotes: 0
Reputation: 20640
You could use a DataSource and the Microsoft Text File Driver.
http://www.connectionstrings.com/textfile
http://www.codeproject.com/KB/database/ReadTextFile.aspx
Upvotes: 0