【发布时间】:2012-06-17 16:32:06
【问题描述】:
我的程序中有大量从 Web 服务生成的数据。我需要在 DataGrid 中显示这些数据,但返回的数据集合都有不同的格式(一个可能是 3 列,接下来是 7 列),因此我无法创建特定对象来保存这些数据。我无法显示此信息。现在我正在尝试使用这种方法。我将数据放入 KeyValuePairs 的二维列表中。键是该数据所属的列,值是该行的输出。这就是我现在正在尝试的。
private void SetDataValuesExecute(List<List<KeyValuePair<string,object>>> Data)
{
ResultsCollection = Data;
ValuesDataGrid.Columns.Clear();
foreach (string colName in Data[0].Select(x => x.Key).ToList())
{
DataGridTextColumn tempCol = new DataGridTextColumn();
tempCol.Header = colName;
Binding bind = new Binding();
bind.Source = ResultsCollection.Select(x => x.FirstOrDefault(y => y.Key == colName).Value.ToString()).ToList();
tempCol.Binding = bind;
ValuesDataGrid.Columns.Add(tempCol);
}
}
ResultsCollection 是一个非易失性变量,用作我的绑定源。它是我构建 DataGrid 所需的所有二维列表数据的副本。
这会查看第一个条目,然后提取列标题值并基于该值创建新列。绑定语句查看每一行,获取指定列的数据,并尝试将其设置为列的绑定。这使我可以同时拥有列名和该列中所有数据的列表。不幸的是,将数据列表绑定到列最终不会显示任何数据。
所以我的问题是:我需要如何格式化我的数据才能让列绑定实际显示数据?我接近这种情况完全错了吗?感谢任何帮助,因为我很困惑。
【问题讨论】:
-
如果你只通过一行是否有效?可以肯定的是,它的行列数少于第一列,并抛出和超出范围异常。我认为您将需要遍历行以找到最大 col 计数,然后将每一行填充到该最大计数。
-
@Blam 每个单独数据集的所有行都具有完全相同的字段(相同的列数)。我得到一组新的数据来更改列号,当发生这种情况时,我将清除 DataGrid 并用新数据替换它。
标签: c# wpf dynamic binding datagrid