【问题标题】:Dynamic number of columns bound to a UWP datagrid (Windows Community Toolkit)绑定到 UWP 数据网格的动态列数(Windows 社区工具包)
【发布时间】:2020-03-10 09:50:58
【问题描述】:

有没有人将动态列数绑定到 UWP 中的数据网格的示例项目?在 WPF 中,我可以使用 Telerik Datagrid 处理可观察的动态对象集合。但在 UWP Telerik 中不支持动态对象。我尝试过使用 Windows 社区工具包数据网格,但也失败了。

【问题讨论】:

    标签: mvvm datagridview uwp


    【解决方案1】:

    绑定到 UWP 数据网格的动态列数(Windows 社区工具包)

    源自 Samed Bejtovic 的 reply。我们可以使用 Windows Community Toolkit DataGrid 在代码中创建动态列数。例如,在填写DataGrid 之前,我们需要将集合转换为DataTable。下面是加载csv文件并将数据插入到DataTable

    var dt = new DataTable();
    bool firstLine = true;
    
    var sr = new StreamReader("Assets\\Archive.csv");
    while (sr.Peek() >= 0)
    {
        if (firstLine)
        {
            firstLine = false;
            var cols = sr.ReadLine().Split(',');
            foreach (string col in cols)
                dt.Columns.Add(new DataColumn(col, typeof(string)));
        }
        else
        {
            var data = sr.ReadLine().Split(',');
            dt.Rows.Add(data);
        }
    }
    

    然后我们调用FillDataGrid(dt,MyDataGrid),它可以在DataTable的基础上将Columns添加到DataGrid中。

    public static void FillDataGrid(DataTable table, DataGrid grid)
    {
        grid.Columns.Clear();
        for (int i = 0; i < table.Columns.Count; i++)
        {
            grid.Columns.Add(new DataGridTextColumn()
            {
                Header = table.Columns[i].ColumnName,
                Binding = new Binding { Path = new PropertyPath("[" + i.ToString() + "]") }
            });
        }
    
        var collection = new ObservableCollection<object>();
        foreach (DataRow row in table.Rows)
        {
            collection.Add(row.ItemArray);
        }
    
        grid.ItemsSource = collection;
    }
    

    【讨论】:

      【解决方案2】:
      DataCollection = new ObservableCollection<dynamic>();
                                          while (reader.Read())
                                          {
                                              string project = reader.GetString(0);
                                              decimal number = reader.GetDecimal(1);
                                              DataCollection.Add(new DataSummary(project, number));
                                          }
      

      Datagrid 支持自动生成的列。将项目源设置为集合。 https://www.reddit.com/r/UWP/comments/djzcqj/display_datatable_as_datagrid/?utm_source=share&utm_medium=web2x

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-09
        • 1970-01-01
        • 1970-01-01
        • 2014-08-25
        • 2020-03-20
        • 1970-01-01
        相关资源
        最近更新 更多