【问题标题】:Reading from .txt file, then exporting data to DataGridView从 .txt 文件中读取,然后将数据导出到 DataGridView
【发布时间】:2013-05-11 15:17:02
【问题描述】:

我知道这是一个可笑的问题,但是上帝,我最后一天都在用它来敲我的头,但它根本行不通!该死的老师甚至没有提到将任何数据导入DataGridView!

我有一个 C# Windows 窗体作业:我必须从 .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、姓名、姓氏...),我写它们只是为了清楚起见,真正的文件中只有原始用户数据。

现在,我之前创建了一个类Users,它有这些字段:

  • 身份证
  • 姓名
  • 姓氏
  • 电话
  • 贵宾
  • 购买的物品
  • 价格

然后创建一个 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 的正确方法是什么?

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

【问题讨论】:

    标签: c# file datagridview tabs


    【解决方案1】:

    如果您已经定义了一个用户对象,您可以向它添加一个静态方法,将数据加载到用户列表并将其绑定到网格视图。

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

    【讨论】:

    • 还有一个愚蠢的问题:在“foreach(File.ReadAllLines(path) 中的var line)”中......呃......什么是“文件”?你能定义它吗?
    • 它的 System.IO.File。只需添加一个 using 指令: using System.IO;
    • 是的,但实际上是:使用 System.IO; P.S:现在很努力让它工作,请为我交叉手指! :>
    • 它有效,谢谢你,我的救主!
    • 真的,我和我的“老师”谈过,我们都同意这是将数据从文件导入 DataGridView 的最佳解决方案之一! :)
    猜你喜欢
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多