Вопрос по c#, file, tabs, datagridview – Чтение из файла .txt, а затем экспорт данных в DataGridView

2

Я знаю, что это смешной вопрос, но, Боже, я провел весь свой последний день, стуча им по голове, и это просто не сработает! Чертов учитель даже не упомянул об импорте данных в DataGridView!

У меня есть домашнее задание C # Windows Forms: мне нужно читать данные из.txt (пользователи) файл и вставьте его вDataGridView таблица в C # Microsoft Visual Studio 2012. Данные вusers.txt что-то вроде этого с разделителями табуляции:

-------------------------------------------------
    ID    Name  Surname Telephone VIP Age Balance
-------------------------------------------------
    0001  John  Killer  1-500-300  0  13  2272
    0002  Name  Surname 1-500-200  0  27  225
    0003  Martin King   1-500-400  1  41  1070

Проигнорируйте имена меток (ID, Имя, Фамилия ...), я написал их только для ясности, настоящий файл содержит только необработанные пользовательские данные.

Теперь я ранее создал классUsers, который имеет эти поля:

Я БЫимяФамилиятелефонVIPКупленные вещиЦена

а затем создал DataGridView (usersDataGridView) и импортировал поля из классаUsers в этом.

Хорошо, алгоритмически это довольно простая задача, не так ли?

Моя идея заключалась в следующем: чтение содержимого файла сStreamReaderсохраняя каждую строку в строку, а затем разбивая строку на части, используя\t в качестве разделителя сString.Split.

Однако, как только я разбил эти строки ... ну, я в принципе не представляю, как импортировать их в DataGridView (я "знаю", что это должно быть какDataSource но ... пользовательский интерфейс Visual Studio 2012 кажется мне слишком "сложным", чтобы я мог понять, как я могу указать строку или какой-то чертов тип данных в качестве источника данных).

Мои жалкие попытки привели меня к следующему:

Попытка 1:

public void Test_1()
{
    string filePath = string.Format("{0}/databases/{1}", AppDomain.CurrentDomain.BaseDirectory, "user_db.txt");

    string[] textData = System.IO.File.ReadAllLines(filePath);
    string[] headers = textData[0].Split('\t');

    DataTable dataTable1 = new DataTable();

    foreach (string header in headers)
        dataTable1.Columns.Add(header, typeof(string), null);

    for (int i = 1; i < textData.Length; i++)
        dataTable1.Rows.Add(textData[i].Split('\t'));

    //Set the DataSource of DataGridView to the DataTable
    promotionsDataGridView.DataSource = dataTable1;
}

Попытка 2:

public void ReadFromFile()
{
    string delimeter = "\t";
    string tableName = "BooksTable";
    string fileName = string.Format("{0}/databases/{1}", AppDomain.CurrentDomain.BaseDirectory, "bigtest.sql");

    DataSet dataset = new DataSet();
    StreamReader sr = new StreamReader(fileName);

    dataset.Tables.Add(tableName);
    dataset.Tables[tableName].Columns.Add("InventoryID");
    dataset.Tables[tableName].Columns.Add("Brand");
    dataset.Tables[tableName].Columns.Add("Category");
    dataset.Tables[tableName].Columns.Add("Description");
    dataset.Tables[tableName].Columns.Add("Promotions");
    dataset.Tables[tableName].Columns.Add("Quantity");
    dataset.Tables[tableName].Columns.Add("Price");

    string allData = sr.ReadToEnd();
    string[] rows = allData.Split("\r".ToCharArray());

    foreach (string r in rows)
    {
        string[] items = r.Split(delimeter.ToCharArray());
        dataset.Tables[tableName].Rows.Add(items);
    }
    this.productsDataGridView.DataSource = dataset.Tables[0].DefaultView;
}

Однако я продолжаю получать какую-то ерунду

Размер входного массива больше любого

Так как у меня буквально нет опыта работы сDataGridView Я предполагаю, что у меня есть некоторые ужасные ошибки на уровне алгоритма, верно ?!

Пожалуйста, кто-нибудь, помогите мне! Я прочитал, скопировал, вставил, скомпилировал и отладил около 20 различных проблем на аналогичную тему, и я до сих пор нигде нет!

Что такоеправильный способ чтения данных из.txt файл, а затем вставить его в DataGridView?

Любая помощь или ответы высоко ценятся!

Ваш Ответ

1   ответ
6

вы можете добавить к нему статический метод, который загружает данные в список пользователей и привязывает их к представлению таблицы.

public class User {
  public string Id { get; set; }
  public string Name { get; set; }
  public string Surname { get; set; }
  public string Telephone { get; set; }
  public bool Vip { get; set; }
  public int Age { get; set; }
  public decimal Balance { get; set; }

  public static List<User> LoadUserListFromFile(string path) {
    var users = new List<User>();

    foreach (var line in File.ReadAllLines(path)) {
      var columns = line.Split('\t');
      users.Add(new User {
        Id = columns[0],
        Name = columns[1],
        Surname = columns[2],
        Telephone = columns[3],
        Vip = columns[4] == "1",
        Age = Convert.ToInt32(columns[5]),
        Balance = Convert.ToDecimal(columns[6])
      });
    }

    return users;
  }
}

Затем вы можете просто загрузить это в сетку данных:

usersDataGridView.DataSource = User.LoadUserListFromFile("user_db.txt");
ОНО РАБОТАЕТ, СПАСИБО, МОЙ СПАСАТЕЛЬ! <3 Placeholder
Его System.IO.File. Просто добавьте директиву using: using System.IO; Alaa Masoud
Да, но это на самом деле: использование System.IO; П.С .: Так стараюсь, чтобы все заработало прямо сейчас, пожалуйста, скрестите мне палец! :> Placeholder
На самом деле, я разговаривал со своим «учителем», и мы оба согласились, что это было одно из лучших решений для импорта данных в DataGridView из файла! :) Placeholder
Еще один глупый вопрос: в "foreach (var line в File.ReadAllLines (path))" ... э-э ... Что такое "File"? Не могли бы вы определить это? Placeholder

Похожие вопросы