2013-05-11 58 views
2

我知道这是一个可笑的问题,但上帝,我已经度过了我整个最后一天,用它敲我的头,它不会工作!该死的老师甚至没有提及任何有关将数据导入DataGridView的内容!从.txt文件读取数据,然后将数据导出到DataGridView

我有一个C#Windows窗体的家庭作业:我必须在users.txt文件从.txt(用户)的文件中读取数据,并将其粘贴到的DataGridView表在C#微软的Visual Studio 2012年的数据是一样的东西与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,它具有以下字段:

  • ID
  • 名称
  • 电话
  • VIP
  • 购买的物品
  • 价格

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

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

我的想法是做以下:用StreamReader读取文件内容,保存每行一个字符串,然后分割字符串转换成使用\tString.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; 
} 

不过,我不断收到一些废话错误,如

输入数组大小越大t韩无论

因为我从字面上没有经验DataGridView我想我在算法级别有一些可怕的错误,对吧?!

请大家帮帮我!我已经阅读,复制,粘贴,编译和调试了类似主题的20个不同的问题,我仍然无处可寻!

什么是正确.txt文件读取数据,然后将其粘贴到DataGridView?

任何帮助或答案深表感谢!

回答

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

只要再一个愚蠢的问题:在 “的foreach(VAR线File.ReadAllLines(路径))” ......呃。什么是“文件”?你能定义它吗? – Placeholder 2013-05-11 17:23:12

+0

其System.IO.File。只需添加一个using指令:using System.IO; – 2013-05-11 17:31:08

+0

是的,但它实际上是:使用System.IO; P.S:努力使它现在工作,请为我手指! :> – Placeholder 2013-05-11 17:32:13

相关问题