如何在WPF GUI(列表视图)中查看CSV文件?

时间:2018-07-25 06:32:56

标签: c# wpf listview

我希望能够在列表视图中看到不同的CSV文件(不能同时看到)。 CSV文件具有不同的列。

我已经在GeneralLogic.cs类中编写了此方法:

public void readCSV(string filename, MainWindow mw)
{
    connectToDBLogic();
    using (StreamReader reader = new StreamReader(filename, Encoding.Default))
    {
        reader.ReadLine();
        while (!reader.EndOfStream)
        {
            string line = reader.ReadLine();
            string[] values = line.Split(';');

        }
    }
}

这是我的MainWindow方法:

private void btnShowCSVClicked(object sender, RoutedEventArgs e)
{
    gl.readCSV(fileNameBox.Text, this);
}

但是我必须添加什么,该表显示在列表视图中?我称它为listViewTable。

感谢帮助:)

2 个答案:

答案 0 :(得分:0)

您需要将ItemsSource的{​​{1}}属性设置为您的ListView方法返回的结果。当前,该方法不返回任何值。

readCSV更改为public void readCSV

然后,您需要将public List<string[]> readCSV的列绑定到ListView的{​​{1}}中的字段

答案 1 :(得分:0)

目前,您的readCSV不返回任何内容。也许它可以返回保存在文件中的对象列表。然后bind it到ListView。

获取CSV值:

1 /。没有外部库。

public void readCSV(string filename, MainWindow mw)
{
    var result = File.ReadAllLines(filename)
                .Select(line => line.Split(';'))
                .Select(x => new MyObject { 
                    prop1 = x[0],
                    prop2 = x[1],
                    //etc.. 
                })
    return result;
}

或将结果绑定到列表,如myListView.ItemsSource =

但是这种没有外部解析器的方法将无法处理错误,格式错误的csv等。但是使用简单的lib却是微不足道的。

2 /。使用CsvHelper

映射信息:

public class MyClass
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime CreatedDate { get; set; }
}

public sealed class MyClassMap : ClassMap<MyClass>
{
    public MyClassMap()
    {
        AutoMap();
        Map( m => m.CreatedDate ).Ignore();
    }
}

您可以像这样使用它:

var csv = new CsvReader( textReader );
var records = csv.GetRecords<MyClass>();

示例和代码格式CsvHelper

绑定:

绑定到列表视图很简单。

// Assign the source
myListView.ItemsSource = gl.ReadCSV();

// Add to existing items
myListView.Items.AddRange(gl.ReadCSV());