2
我想编写一个将显示CSV文件数据的应用程序。在列表框中显示动态列
我认为这将是最容易使用列表框来做到这一点。
我只是不确定如何定义数据模板以适应csv希望定义的列数。有没有办法根据列表中的项目数来定义网格中的列数?
我想编写一个将显示CSV文件数据的应用程序。在列表框中显示动态列
我认为这将是最容易使用列表框来做到这一点。
我只是不确定如何定义数据模板以适应csv希望定义的列数。有没有办法根据列表中的项目数来定义网格中的列数?
使用一个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;
}
我很困惑,什么是 “[” + I + “]” 指的? – Luke
@Luke:它绑定到通过索引器访问的第i个项目,以便每列显示项目中的第i个条目,该条目是包含所有列的所有值的数组。 –
对,我想我可以做到这一点。谢谢。 – Luke