将.csv文件读入WPF应用程序(C#) [英] Reading a .csv file into WPF application (C#)

查看:87
本文介绍了将.csv文件读入WPF应用程序(C#)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

最近我刚刚制作了一个C#控制台应用程序,它可以读取.csv文件并以一种简洁的方式将其写入控制台,但是现在我想在WPF中制作它以使其更加简洁.

I've just recently made a C# console application that could read a .csv file and write it to the console in a neat manner, however now I want to make it in WPF to make it even more neat.

我以前的控制台应用程序如下所示:

My previous console application looks like this:

class Program
{
    static void Main(string[] args)
    {
        string[] tokens;
        char[] separators = { ';' };
        string str = "";

        FileStream fs = new FileStream(@"D:\Dokumenter\Skole\6. semester\GUI\Exercises\Exercise2\02 deltagerliste.csv", 
                                       FileMode.Open);
        StreamReader sr = new StreamReader(fs, Encoding.Default);

        while ((str = sr.ReadLine()) != null)
        {
            tokens = str.Split(separators, StringSplitOptions.RemoveEmptyEntries);

            Console.WriteLine(String.Format("{0,-20}", tokens[0]) +
                              String.Format("{0,-15}", tokens[1]) +
                              String.Format("{0,-15}", tokens[2]) +
                              String.Format("{0,-15}", tokens[3]));
        }

        Console.ReadLine();            
    }
}

效果很好,但我必须承认,我很难找到从WPF应用程序开始的地方.

It works great, but I must admit that I have difficulties finding out where to begin with the WPF application.

到目前为止,我已经将以下XAML代码与.csv文件的四个标头结合在一起(因为它具有四列),我假设我必须找到一种方法来将适当的行放入相应的列中.

So far I have conjured up the following XAML code with the four headers of the .csv file (since it has four columns) and I assume I have to find a way to put the appropriate rows into the respective columns.

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Deltagerliste" Height="350" Width="525" WindowStartupLocation="CenterScreen" WindowState="Maximized"
    Background="DeepPink"
    >
<ListView HorizontalAlignment="Left" Height="320" VerticalAlignment="Top" Width="517">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="First name"/>
            <GridViewColumn Header="Last name"/>
            <GridViewColumn Header="ID"/>
            <GridViewColumn Header="Email"/>
        </GridView>
    </ListView.View>
</ListView>

我的主要和最初的问题是如何将文件读入ListView.我是C#和XAML的新手,即使我很清楚如何在C#中打开和读取文件,但XAML的语法还是让我有些困惑.

My main and initial problem is how I read in the file to the ListView. I'm new to both C# and XAML and even though I'm well aware of how to open and read a file in C#, the syntax in XAML is a little confusing to me.

推荐答案

首先:创建一个可容纳每行数据的类.

First: Create a class that will hold the data per row.

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int ID { get; set; }
    public string Email { get; set; }

    public Person(string firstName, string lastName, int id, string email)
    {
        FirstName = firstName;
        LastName = lastName;
        ID = id;
        Email = email;
    }
}

然后创建一个将从CSV文件返回人员"列表的函数:

Then create a function that will return a list of Persons from the CSV file:

public IEnumerable<Person> ReadCSV(string fileName)
{
    // We change file extension here to make sure it's a .csv file.
    // TODO: Error checking.
    string[] lines = File.ReadAllLines(System.IO.Path.ChangeExtension(fileName, ".csv"));

    // lines.Select allows me to project each line as a Person. 
    // This will give me an IEnumerable<Person> back.
    return lines.Select(line =>
    {
        string[] data = line.Split(';');
        // We return a person with the data in order.
        return new Person(data[0], data[1], Convert.ToInt32(data[2]), data[3]);
    });
}

然后使用适当的绑定配置listview列.请注意,x:Name属性是将用于访问以下格式的.cs文件中的此列表视图的名称:

Then configure your listview columns with the appropriate binding. Note that the x:Name property is the name you will use to access this listview in the .cs file of the form:

<ListView x:Name="ListViewPeople">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="First name" Width="100" DisplayMemberBinding="{Binding Path=FirstName}"/>
            <GridViewColumn Header="Last name" Width="150" DisplayMemberBinding="{Binding Path=LastName}"/>
            <GridViewColumn Header="ID" Width="40" DisplayMemberBinding="{Binding Path=ID}"/>
            <GridViewColumn Header="Email" Width="200" DisplayMemberBinding="{Binding Path=Email}"/>
        </GridView>
    </ListView.View>
</ListView>

最后,您将listview的ItemsSource绑定到返回Person列表的方法:

Lastly you bind the ItemsSource of the listview to the method returning the Person list:

public MainWindow()
{
    InitializeComponent();

    // We can access ListViewPeople here because that's the Name of our list
    // using the x:Name property in the designer.
    ListViewPeople.ItemsSource = ReadCSV("example");
}

CSV文件

Henk;van Dam;1;henk.van.dam@gmail.com
Alex;the Great;2;alex.the_great@live.nl

最终结果

这篇关于将.csv文件读入WPF应用程序(C#)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆