2013-05-11 8 views
2

Я знаю, что это смешной вопрос, но Бог, я провел весь свой последний день, ударяя головой по нему, и это просто не сработает! Проклятый учитель даже не упоминал об импорте каких-либо данных в DataGridView!Чтение из TXT-файла, затем экспорт данных в 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, который имеет следующие поля:

  • ID
  • Имя
  • Фамилия
  • Телефон
  • VIP
  • Купил предметы
  • Цена

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

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

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

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

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

Попытка 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; 
} 

Однако я получаю ошибку ерунды как

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

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

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

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

Любая помощь или оценка глубоко оценены!

ответ

6

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

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"); 
+0

Просто еще один глупый вопрос: в «Еогеасп (вар линии в File.ReadAllLines (путь))» ... э-э. .. Что такое «Файл»? Не могли бы вы это определить? – Placeholder

+0

Его System.IO.File. Просто добавьте директиву using: using System.IO; –

+0

Да, но это на самом деле: using System.IO; P.S: Попытка так сильно заставить его работать прямо сейчас, пожалуйста, перейди палец ко мне! :> – Placeholder