绑定到UWP数据网格的动态列数(Windows Community Toolkit)

时间:2019-11-14 12:26:30

标签: mvvm datagridview uwp

有人在UWP中有一个绑定到数据网格的动态列数的示例项目吗?在WPF中,我可以使它与Telerik Datagrid一起用于可观察的动态对象集合。但是在UWP中,Telerik不支持动态对象。我尝试使用Windows Community Toolkit数据网格,但也失败了。

2 个答案:

答案 0 :(得分:1)

  

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

源自Samed Bejtovic的reply。我们可以使用 Windows社区工具包 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),它可以基于Columns之上将DataGrid添加到DataTable中。

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;
}

答案 1 :(得分:0)

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