none
Проблемы с построчным чтением файла в datagridview RRS feed

  • Вопрос

  • С datagridview раньше никогда не работал. Да и русскоязычной информации по нему не так и много. Вот код:

    private void button1_Click(object sender, EventArgs e)  
            {
              
                string adress = "db/" + name_textbox.Text + ".txt";
                StreamReader read_datagridview = new StreamReader(adress);
                string[] read_datagridview_data_arr = File.ReadAllText(adress).ToString().Split(' ');
                string row = read_datagridview.ReadLine();
                while (read_datagridview_data_arr != null)
                {
                                    view_datagridview.Rows.Add(read_datagridview_data_arr);
                    row = read_datagridview.ReadLine();
                                }
            }
    Мне нужно в datagridview по нажатию кнопки загружать данные из текстового файла (путь прописан в переменной adress). Что-то никак не получается. Как нужно делать? Ошибки и сам вижу. Просто не понимаю как нужно. Помогите пожалуйста. Если вдруг то проект здесь:su0.ru/Nypm.




    • Изменено diargon345 20 ноября 2014 г. 23:55 12
    20 ноября 2014 г. 23:51

Ответы

  • Данные из файла следует считать в какой либо объект который может выступать в качестве источника данных для DGV.

    После чего сделать так:

    dgv.DataSource = data;

    В качестве объекта можно использовать например List<T> или DataTable.

    В первом случае надо будет создать тип который будет иметь проперти для каждого из полей в текстовом файле, например:

    class Person 

    {

    public string FirstName {get; set;}

    public string LastName {get; set;}

    ...

    }

    Даные из файла будут заполять нужные поля.

    Что делать в случае DataTable можно найти поискав что то вроде "load csv datatable c#". В данном случае речь идет о разделении запятыми но не сложно будет обобщить и на пробелы если надо.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Предложено в качестве ответа YatajgaModerator 21 ноября 2014 г. 6:23
    • Помечено в качестве ответа diargon345 21 ноября 2014 г. 8:23
    21 ноября 2014 г. 0:53
    Модератор

Все ответы

  • Данные из файла следует считать в какой либо объект который может выступать в качестве источника данных для DGV.

    После чего сделать так:

    dgv.DataSource = data;

    В качестве объекта можно использовать например List<T> или DataTable.

    В первом случае надо будет создать тип который будет иметь проперти для каждого из полей в текстовом файле, например:

    class Person 

    {

    public string FirstName {get; set;}

    public string LastName {get; set;}

    ...

    }

    Даные из файла будут заполять нужные поля.

    Что делать в случае DataTable можно найти поискав что то вроде "load csv datatable c#". В данном случае речь идет о разделении запятыми но не сложно будет обобщить и на пробелы если надо.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Предложено в качестве ответа YatajgaModerator 21 ноября 2014 г. 6:23
    • Помечено в качестве ответа diargon345 21 ноября 2014 г. 8:23
    21 ноября 2014 г. 0:53
    Модератор
  • "Да и русскоязычной информации по нему не так и много." - наоборот, много :) Одого только MSDN достаточно, не говоря о книгах.

    Сделаем содержимое сообщества лучше, вместе!

    21 ноября 2014 г. 6:24
    Модератор
  • Ладно, спасибо. Буду пробовать.
    21 ноября 2014 г. 8:24
  • Данные из файла следует считать в какой либо объект который может выступать в качестве источника данных для DGV.


    А можете объяснить что за объект? Не понимаю
    21 ноября 2014 г. 8:34
  • Я указал типы объектов выше.

    Или вы не знакомы с основами ООП? Боюсь что этот случай выходит за рамки форума.

    Посоветую почитать самостоятельно, пары недель должно хватить для ознакомления с основами:

    http://yandex.ru/yandsearch?lr=102561&text=%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B+%D0%9E%D0%9E%D0%9F


    This posting is provided "AS IS" with no warranties, and confers no rights.

    21 ноября 2014 г. 17:39
    Модератор
  • Я указал типы объектов выше.

    Какие типы? Я не увидел. Занести все данные в класс и считывать с него? Или что?

    Данные из файла следует считать в какой либо объект который может выступать в качестве источника данных для DGV.

    Какой либо - это какой? Это самая первая строка. Что ещё может быть выше? Где типы указаны типы объектов? Я что-то увидеть не могу.

    Или вы не знакомы с основами ООП?

    Знаком. Просто конкретики не хватает для понимания (не имею ввиду код, а имею ввиду на примере объектов - думаю объяснения что я имею в виду не нужно)

    Ещё раз спасибо за внимание.
    • Изменено diargon345 21 ноября 2014 г. 23:32
    21 ноября 2014 г. 23:30
  • Вот эти типы:

    List<T> или DataTable

    Пример:

    var source = new List<Person>();

    source.Add( new Person() { FirstName = "Вася", LastName = "Пупкин"});

    source.Add( new Person() { FirstName = "Женя", LastName = "Иванова"});

    source.Add( new Person() { FirstName = "Тоня", LastName = "Петрова"});

    dgv.DataSource = source;

    Конечно обекты в списке должны отображать ваши данные и заполнять их надо из файла. 


    This posting is provided "AS IS" with no warranties, and confers no rights.


    22 ноября 2014 г. 0:38
    Модератор
  • Спасибо. Понял
    22 ноября 2014 г. 9:38
  • Нашёл способ проще:

    private void button1_Click(object sender, EventArgs e)
            {
                string adress = "db/" + name_textbox.Text + ".txt";
                StreamReader read_datagridview = new StreamReader(adress);
                string[] read_datagridview_data_arr = File.ReadAllText(adress).ToString().Split(' ');
                for (int i=0, j=1;j<read_datagridview_data_arr.Length; i+=2, j+=2)
                {
    
                    view_datagridview.Rows.Add(read_datagridview_data_arr[i],read_datagridview_data_arr[j]);
                }
            }

    22 ноября 2014 г. 14:42
  • Современные подходы к программированию предусматривают "развязку" UI от логики программы, например используя подходы MVVM или MVC. Ваш код выше является прямой противоположностью данных подходов.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    23 ноября 2014 г. 18:12
    Модератор