我有多组列表,其中包含有关列标题和该列值的数据。对于任何特定集合,列标题保持不变。但它们对于不同的集合是不同的。集合中的每个列表都将表示数据网格中的一行。在特定时间,一组数据将显示在grid.Hence中,列标题对于该组中的所有列表将是相同的。列表中的值将以行显示。假设我们有两个列表:
List<Data> l1 = new List<Data>(){new Data(){Header="A",Value="A1"},new Data(){Header="B",Value="B1"}};
List<Data> l2 = new List<Data>(){new Data(){Header="A",Value="A2"},new Data(){Header="B",Value="B2"}};
数据应在网格中显示为:
A B
A1 B1
A2 B2
所以,我如何实现这一点,就像创建绑定一样,我必须创建公共属性。我不能硬编码这些属性,因为它们是动态的。
答案 0 :(得分:0)
我使用ASh建议使用DataTable解决了这个问题.Below是我用来将数据转换为DataTable的代码。
public static DataTable GenerateDataGridFromMetaData(List<ObservableCollection<DocumentMetaData>> dataList)
{
try
{
if (dataList.Count > 0)
{
DataTable dataTable = new DataTable();
List<int> skipColumn = new List<int>();
for (int index = 0; index < dataList.Count; index++)
{
ObservableCollection<DocumentMetaData> metaDataList = dataList[index];
List<string> values = new List<string>();
for (int metaDataIndex = 0; metaDataIndex < metaDataList.Count; metaDataIndex++)
{
DocumentMetaData docMetaData = metaDataList[metaDataIndex];
if (index == 0)
{
if (!dataTable.Columns.Contains(docMetaData.Title))
{
dataTable.Columns.Add(docMetaData.Title);
values.Add(docMetaData.Value);
}
else
{
skipColumn.Add(metaDataIndex);
}
}
else
{
if (!skipColumn.Contains(metaDataIndex))
{
values.Add(docMetaData.Value);
}
}
}
dataTable.Rows.Add(values);
}
return dataTable;
}
else
{
return null;
}
}
catch (Exception ex)
{
}
}
这是我用来将数据表绑定到网格的代码。
DataTable table = GridViewConverter.GenerateDataGridFromMetaData(dataList);
DataGrid.ItemsSource = table.DefaultView;
请确保AutoGenerateColumns属性设置为true,否则网格不会显示数据。