DataGrid中的CSV /文本Wpf

我似乎无法弄清楚如何在DataGrid中添加我的CSV文件。 有人可以解释一下我的方法应该是什么吗?

假设我的csv文件中包含以下内容的CSV文件:

ID;Name;Age;Gender 01;Jason;23;Male 02;Lela;29;Female 

真的需要一些帮助

忘记基于DataTable的东西。 这太可怕了。 它不是强类型的,它会强迫你进行各种各样的“魔术串”黑客攻击。

相反,创建一个适当的强类型数据模型:

 public class Person { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public Gender Gender { get; set; } } public enum Gender { Male, Female } 

然后创建一个可以从文件加载数据的服务:

 public static class PersonService { public static List ReadFile(string filepath) { var lines = File.ReadAllLines(filepath); var data = from l in lines.Skip(1) let split = l.Split(';') select new Person { Id = int.Parse(split[0]), Name = split[1], Age = int.Parse(split[2]), Gender = (Gender)Enum.Parse(typeof(Gender), split[3]) }; return data.ToList(); } } 

然后使用它来填充UI:

 public partial class Window2 : Window { public Window2() { InitializeComponent(); DataContext = PersonService.ReadFile(@"c:\file.csv"); } } 

XAML:

    

结果:

在此处输入图像描述

虽然我找到了其他方法:保持简单

这是我想象的方式:

 //Location of CSV File string CSVDataBase = @"C:\CSVDatabase.csv"; //Create Collection for DataGrid Source ICollection CreateDataSource() { //Create new DataTables and Rows DataTable dt = new DataTable(); DataRow dr; //Create Column Headers dt.Columns.Add(new DataColumn("ID", typeof(string))); dt.Columns.Add(new DataColumn("Name", typeof(string))); dt.Columns.Add(new DataColumn("Age", typeof(string))); dt.Columns.Add(new DataColumn("Gender", typeof(string))); //For each line in the File foreach (string Line in File.ReadLines(CSVDataBase)) { //Split lines at delimiter ';'' //Create new Row dr = dt.NewRow(); //ID= dr[0] = Line.Split(';').ElementAt(0); //Name = dr[1] = Line.Split(';').ElementAt(1); //Age= dr[2] = Line.Split(';').ElementAt(2); //Gender= dr[3] = Line.Split(';').ElementAt(3); //Add the row we created dt.Rows.Add(dr); } //Return Dataview DataView dv = new DataView(dt); return dv; } 

然后,我所要做的就是:

 public void loadDataGridView() { //Load everything in datagrid myDataGrid.ItemsSource = CreateDataSource(); } 

而已! 这是一个好方法吗? 不管怎样,谢谢你的帮助。