繁体   English   中英

从.txt文件读取,然后将数据导出到DataGridView

[英]Reading from .txt file, then exporting data to DataGridView

我知道这是一个可笑的问题,但是上帝,我花了整整一天的时间用它敲打它,它就行不通了! 这该死的老师甚至没有提到任何关于将任何数据导入DataGridView的事情!

我有一个C#Windows Forms作业分配:我必须从.txt (用户)文件中读取数据并将其粘贴到C#Microsoft Visual Studio 2012中的DataGridView表中users.txt文件中的数据类似于TAB分隔符:

-------------------------------------------------
    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,Name,Surname ...),我只是为了清楚起见而编写它们,真实文件中只包含原始用户数据。

现在,我以前创建了一个类Users ,它具有以下字段:

  • ID
  • 名称
  • 电话
  • 要人
  • 买了物品
  • 价钱

然后创建一个DataGridView( usersDataGridView )并从其中的类Users中导入字段。

好的,从算法上来说这是一件容易的事,不是吗?

我的想法是执行以下操作:使用StreamReader读取文件内容,将每行保存为字符串,然后使用\\t作为String.Split的分隔符将字符串拆分为多个部分。

但是,一旦我将这些行拆分......好吧,我基本上不知道如何将它们导入到DataGridView中(我知道它应该是一个DataSource但是...... Visual Studio 2012的UI看起来太复杂了) ”,以便让我弄清楚如何将字符串或任何该死的数据类型作为数据源。

我可怜的尝试使我想到了以下几点:

尝试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的正确方法是什么?

任何帮助或答案都非常感谢!!

如果已经定义了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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM