@Glebster13

Как загрузить данные в DataGridView из текстового файла?

Здравствуйте. Есть DataGridView1, столбцы уже созданы и названы. Необходимо загрузить в эту таблицу данные из текстового файла.
Я написал следующий код, чтобы программно заполнять таблицу:
private void DataInput_Click(object sender, EventArgs e){
   dataGridView1.Rows.Add("01.01.2022" "06:00" "Mersedes" "610-150" "6" "Иванов_Иван_Иванович" "Алексеев_Алексей_Алексеевич" 9999);
   dataGridView1.Rows.Add("01.01.2022" "06:00" "Mersedes" "610-150" "6" "Иванов_Иван_Иванович" "Алексеев_Алексей_Алексеевич" 9999);
    //И так далее
}

Однако мне-то нужна именно загрузка данных из файла, и как её реализовать я не понимаю. Я пробовал создать массив, в котором элементы являются необходимыми данными, и передать его в качестве параметра в dataGridView1.Rows.Add(). И это работает, однако если задать значение массиву из, например, элемента TextBox (через запятую), то я просто получу длинную строку, которая пойдет в нулевой элемент массива.

Мне подсказали, что для этого (выгрузки данных из файла) нужно сделать 2 класса: один - класс шаблон DataTemplate, второй - класс для считывания данных из текстового файла LoadManager. Я их написал:
//Класс шаблон
using System;
using System.Collections.Generic;
using System.Text;
 
namespace Kursovaya
{
    public class DataTemplate
    {
        public string DateWork { get; set; }
        public string Time { get; set; }
        public string BrandBus { get; set; }
        public string CityNumber { get; set; }
        public string RouteNumber { get; set; }
        public string DriverName { get; set; }
        public string CashierName { get; set; }
        public int Income { get; set; }
        public DataTemplate(string datework = "none",
                            string time = "none",
                            string brandbus = "none",
                            string citynumber = "none",
                            string routenumber = "none",
                            string drivername = "none",
                            string cashiername = "none",
                            int income = 0)
        {
            DateWork = datework;
            Time = time;
            BrandBus = brandbus;
            CityNumber = citynumber;
            RouteNumber = routenumber;
            DriverName = drivername;
            CashierName = cashiername;
            Income = income;
        }
    }
}

И второй класс:
//Класс для считывания данных из текстового файла
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Kursovaya
{
    public class LoadManager
    {
        private bool PathCheck(string check)
        {
            if (!Directory.Exists(@"data"))
            {
                Directory.CreateDirectory(@"data");
                return false;
            }
            else
            {
                if (File.Exists(check))
                {
                    return File.ReadAllText(check).Length != 0;
                }
                return false;
            }
        }
        public Dictionary<string, DataTemplate> InputData()
        {
            Dictionary<string, DataTemplate> inputdata = new Dictionary<string, DataTemplate>();
            //Загрузка данных, если существуют
            if (PathCheck(@"data\inputdata.txt"))
            {
                // Чтение файла сохранения и создания из него массива
                string[] tmpRows = File.ReadAllText(@"data\inputdata.txt").Trim().Split('\n');
                string[] tmpColumns;
                foreach (string item in tmpRows)
                {
                    tmpColumns = item.Split('>');
 
                    // Создаём новые данные
                    DataTemplate datatemplate = new DataTemplate(tmpColumns[0],
                                                                tmpColumns[1],
                                                                tmpColumns[2],
                                                                tmpColumns[3],
                                                                tmpColumns[4],
                                                                tmpColumns[5],
                                                                tmpColumns[6],
                                                                int.Parse(tmpColumns[7])
                                                           );
                    // Добавляем данные в словарь
                    inputdata.Add(datatemplate.DateWork, datatemplate);
                }
            }
            return inputdata;
        }
    }
}


Был написан ещё один класс под названием SaveManager. Его назначение мне непонятно, но вроде как он должен помочь в решении задачи. Вот его код:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Kursovaya
{
    public class SaveManager
    {
        private void PathCheck()
        {
            if (!Directory.Exists(@"data"))
            {
                Directory.CreateDirectory(@"data");
            }
        }
        public void InputData(Dictionary<string, DataTemplate> inputdata)
        {
            PathCheck();
            StringBuilder stringBuilder = new StringBuilder();
            foreach (var item in inputdata)
            {
                stringBuilder.Append(string.Join(">", new string[]
                    {
                        item.Value.DateWork,
                        item.Value.Time,
                        item.Value.BrandBus,
                        item.Value.CityNumber,
                        item.Value.RouteNumber,
                        item.Value.DriverName,
                        item.Value.CashierName,
                        item.Value.Income.ToString()
 
                    }));
                stringBuilder.Append("\n");
            }
            // Запись в файл
            File.WriteAllText(@"data\inputdata.txt", stringBuilder.ToString());
        }
    }
}


Также была создана кнопка с соответствующим кодом:
private void button1_Click(object sender, EventArgs e)
        {
            SaveManager saveManager = new SaveManager();
            saveManager.InputData(datatemplate);
        }


А что делать дальше я так и не понял. Двигаюсь ли я вообще в правильном направлении? И что мне конкретно нужно сделать, чтобы данные вносились в dataGridView1 из текстового файла?
  • Вопрос задан
  • 1400 просмотров
Пригласить эксперта
Ответы на вопрос 2
tsklab
@tsklab
Здесь отвечаю на вопросы.
Комментировать
blood-moon
@blood-moon
Фрилансер
Можно просто читать файл построчно и заносить вот этим кодом
dataGridView1.Rows.Add("01.01.2022" "06:00" "Mersedes" "610-150" "6" "Иванов_Иван_Иванович" "Алексеев_Алексей_Алексеевич" 9999);


ps: если не поняли то дайте пример пары строк файла , я вам сам напишу код
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы