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(); }
而已! 这是一个好方法吗? 不管怎样,谢谢你的帮助。