Как перенести данные из TXT-файла в DataGridView с помощью Visual Basic - PullRequest
0 голосов
/ 11 октября 2018

У меня в настоящее время есть текстовое поле, подобное этому:

John-15feb23-вторник-6: 00 pm-bad luck

John2-18feb23-Wednsday-3: 00 pm-Unknown

John3-16feb23-Friday-5: 00 pm- плохая удача

Он отделен символом "-", поэтому я знаю, что он должен идти в другом столбце.

Явозникли проблемы при передаче этих данных в мой DataGridVew.Я пытаюсь передать его в DataTable, затем в Datarows и оттуда передать его в мою dataGrid.

Вот что у меня есть:

 private void button2_Click(object sender, EventArgs e)
    {

        DataTable ss = new DataTable();

        ss.Columns.Add("Alumno");
        ss.Columns.Add("Profesor");
        ss.Columns.Add("Día");
        ss.Columns.Add("Hora");
        ss.Columns.Add("Asunto");

        DataRow row = ss.NewRow();

        String linea;
        try
        {
            StreamReader tem = new StreamReader("C:\\cardiel.txt");
            linea = tem.ReadLine();
            while (linea != null)
            {

                row["Alumno"] += linea.Split('-')+ "\n";
                row["Profesor"] += linea.Split('-') + "\n";
                row["Día"] += linea.Split('-') + "\n";
                row["Hora"] += linea.Split('-') + "\n";
                row["Asunto"] += linea.Split('-') + "\n";
                ss.Rows.Add(row);
                linea = tem.ReadLine();
                foreach (DataRow Drow in ss.Rows)
                {
                    int num = dataGridView1.Rows.Add();
                    dataGridView1.Rows[num].Cells[0].Value = Drow["Alumno"].ToString();
                    dataGridView1.Rows[num].Cells[1].Value = Drow["Profesor"].ToString();
                    dataGridView1.Rows[num].Cells[2].Value = Drow["Día"].ToString();
                    dataGridView1.Rows[num].Cells[3].Value = Drow["Hora"].ToString();
                    dataGridView1.Rows[num].Cells[4].Value = Drow["Asunto"].ToString();
                }
            }
            tem.Close();
        }
        catch (Exception x)
        {
            Console.WriteLine(x.Message);
        }

Если кто-то может выдатьуказатели или помогите мне, я был бы очень признателен!Спасибо

1 Ответ

0 голосов
/ 11 октября 2018

Если вы пытаетесь просто получить данные из файла в DataGridView в соответствии с исходным вопросом, похоже, вы предпринимаете дополнительные шаги.Это отправит его в DataGridView:

//Buffer for IO reading
const Int32 BufferSize = 512;

private void button2_Click(object sender, EventArgs e)
{
    try
    {
        //Open the file and keep it open while there are lines with using
        using (var fileStream = File.OpenRead(fileName))
        {
            //Open the reader and keep it open while reading non null lines
            using (var streamReader = new StreamReader(fileStream, Encoding.UTF8, true, BufferSize))
            {
                String line;
                //While the StreamReader is reading a line and it is not null, how to handle the line
                while ((line = streamReader.ReadLine()) != null)
                {
                    //Split the string into an array
                    string[] splitarray = line.Split('-');

                    //Add the pieces of the array as a new row into the DataGridView
                    //This should be inside of a try/catch block or have some validation to make sure the array is a certain length (5 in this case)
                    dataGridView.Rows.Add(splitarray[0], splitarray[1], splitarray[2], splitarray[3], splitarray[4]);
                }
            }
        }
    }
    catch(Exception ex){
        Console.WriteLine(ex.message)
    }
}

Вам не нужен DataRow, DataTable или для циклического перебора всех строк каждый раз, когда StreamReader читает другую строку (!).

ПРИМЕЧАНИЕ : не удастся изменить порядок индексов.Также произойдет сбой, если недостаточно индексов с исключением IndexOutOfRange.Кроме того, если в данных есть еще тире, они могут испортить ваш заказ.

IO Note : если это не сделано в отдельном потоке, пользовательский интерфейс будет зависать, как и выиспользуя основной поток для выполнения этой операции.Вы можете использовать BackgroundWorker для выполнения ввода-вывода, а затем применить результаты с BindingSource, упомянутым ниже.

Если вы используете DataTable и DataRow где-то еще, вы можете сохранить их, ноони не обязательны для заполнения DataGridView.

Теперь, если этот файл очень большой с большим количеством строк, он будет ЧРЕЗВЫЧАЙНО медленным (насколько я знаю из опыта) рисовать это.Я бы порекомендовал использовать BindingSource , если вы ожидаете, что его будет много (или даже несколько с частыми перерисовками).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...