读取.txt文件,然后将数据导出到DataGridView
本文关键字:DataGridView 数据 txt 文件 然后 读取 | 更新日期: 2023-09-27 18:13:03
我知道这是一个可笑的问题,但是天哪,我花了一整天的时间来绞尽脑汁,就是不管用!该死的老师根本没提过要把数据导入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, Name,姓氏…),我写它们只是为了清晰,真正的文件中只有原始用户数据。
现在,我已经创建了一个类Users
,它有这些字段:
- ID <
- 名称/gh>
- 姓
- VIP ><
- 买项目/gh>价格
,然后创建一个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");