Possible Duplicate:
Putting a .txt file into a DataGridView
When I click an open button I would like to choose a file and place it into a DataSource
to futher be worked into a DataGridView
.
Right now what I have looks like this:
OpenFileDialog openFile = new OpenFileDialog();
openFile.DefaultExt = "*.txt";
openFile.Filter = ".txt Files|*.txt";
openFile.RestoreDirectory = true;
try
{
if (openFile.ShowDialog() == DialogResult.OK && openFile.FileName.Length > 0)
{
// Right now I am loading the file into a RichTextBox
openFileRTB.LoadFile(openFile.FileName, RichTextBoxStreamType.PlainText);
// What I would like to do is load it into a DataSource and then into a DataGridView.
// So really I would like to remove the openFileRTB line of code and replace it.
// That is where I need help :).
}
}
catch (Exception)
{
MessageBox.Show("There was not a specified file path to open.", "Path Not Found Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
Here is an example of a file I would be opening (space delimited):
Title开发者_运维知识库1 Title2 Title3 Title4 Title5 Title6
abc123 abc123-123-123 225.123 123.456 180 thing99
c123 somethingHERE 987.123 123.456 360 anotherThing1
abc124 somethingHERE225.123 123.456 0 thing99
I am very unfamiliar with DataSource
and DataGridView
so if I could get some help with how it works and what needs to happen, how it would look, etc. that would be greatly appreciated. :)
Thanks.
You could split the lines and loop all rows/columns to generate the DataTable:
For example(VB.NET):
Dim separator = " "c
Dim fileName = OpenFileDialog1.FileName
Dim tbl As New DataTable(fileName)
Dim query = From line In IO.File.ReadAllLines(fileName)
Let row = line.Split(separator)
If query.Any Then
For Each col In query(0).row
'build DataColumns from first line'
tbl.Columns.Add(New DataColumn(col))
Next
If query.Count > 1 Then
For rowIndex = 1 To query.Count - 1
Dim newRow = tbl.NewRow
For colIndex = 0 To query(rowIndex).row.Length - 1
Dim colValue = query(rowIndex).row(colIndex)
newRow(colIndex) = colValue
Next
tbl.Rows.Add(newRow)
Next
End If
End If
This works just as well without LINQ (now also in C# ;)):
....
var rows = System.IO.File.ReadAllLines(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);
}
}
}
精彩评论