CSV/Text in DataGrid Wpf

后端 未结 2 1530
陌清茗
陌清茗 2020-12-03 09:36

I cannot seem to figure out how to add my CSV File in a DataGrid. Can someone explain me what my approach should be?

Lets say i have a CSV file with the following co

相关标签:
2条回答
  • 2020-12-03 09:58

    Although i found some other way: kept it simple

    This is my way i just figured:

    //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;
            }
    

    Then all i had to do is:

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

    Thats it! is this a good approach? Anyway Thanks for the help.

    0 讨论(0)
  • 2020-12-03 10:02

    Forget DataTable-based stuff. It's horrendous. It is not strongly typed and it forces you to all sorts of "magic-string" based hacks.

    Instead, create a proper strongly-typed Data Model:

    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
    }
    

    Then create a Service that can load Data from the File:

    public static class PersonService
    {
        public static List<Person> 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();
        }
    }
    

    And then use that to populate the UI:

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

    XAML:

    <Window x:Class="WpfApplication14.Window2"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Window2" Height="300" Width="300">
        <DataGrid AutoGenerateColumns="True"
                  ItemsSource="{Binding}"/>
    </Window>
    

    Result:

    enter image description here

    0 讨论(0)
提交回复
热议问题