在列表框中显示动态列

时间:2011-09-01 10:11:42

标签: wpf xaml csv listbox

我想编写一个显示CSV文件数据的应用程序。

我认为使用列表框来执行此操作最简单。

我只是不确定如何定义数据模板以容纳与csv希望定义的列数相同的列。有没有办法根据列表中的项目数来定义网格中的列数?

1 个答案:

答案 0 :(得分:4)

使用ListView而不是ListBox,然后你可以使用GridView作为列,或者你可以使用DataGrid,它还可以根据它获得的数据自动创建列,这需要属性,但不是很好在飞行中创造。

我建议你将数据解析为数组对象,然后通过迭代它的长度来创建列。添加如下绑定:new Binding("[" + i + "]")

这是一个粗略的概述:

<ListView Name="csvLv"/>
var view = new GridView();
csvLv.View = view;
using (var reader = new StreamReader(@"PathGoesHere.csv"))
{
    //This is just a sketch and all the data extraction depends on your format
    var lines = reader.ReadToEnd()
        .Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
        .Select(x => x.Split(',')).ToArray();
    var headers = lines[0];
    var data = lines.Skip(1);
    for (int i = 0; i < headers.Length; i++)
    {
        view.Columns.Add(new GridViewColumn()
        { 
            Header= headers[i],
            DisplayMemberBinding = new Binding("[" + i + "]")
        });
    }
    csvLv.ItemsSource = data;
}