【问题标题】:Displaying dynamic columns in a listbox在列表框中显示动态列
【发布时间】:2011-09-01 10:11:41
【问题描述】:

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

我认为使用列表框来做到这一点是最简单的。

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

【问题讨论】:

    标签: wpf xaml csv listbox


    【解决方案1】:

    使用 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:它绑定到通过索引器访问的第 i 个项目,因此每列显示项目中的第 i 个条目,该项目是一个包含所有列的所有值的数组。跨度>
    • 对,我想我可以做到。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    相关资源
    最近更新 更多