开发者

How to put a .txt file into a DataSource? [duplicate]

开发者 https://www.devze.com 2023-03-28 23:23 出处:网络
This question already has answers here: Closed 11 years ago. Possible Duplicate: Putting a .txt file into a DataGridView
This question already has answers here: Closed 11 years ago.

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

精彩评论

暂无评论...
验证码 换一张
取 消