我正在创建一个DataGrid,它由字典中的值填充,该字典包含字符串作为键,List作为值。键应该是列的标题,列表的内容是该列的内容:
header1(key) header2(key) header3(key)
value1fromList value1fromList value1fromList
value2fromList value2fromList value2fromList
value3fromList value3fromList
为此,我正在创建一个填充了此值的DataTable,并将其用作DataGrid的ItemSource。我的问题是我不知道如何以这种方式填充DataTable。我的解决方案只是填补了DataTable的一些空白并覆盖了现有的值。
http://oi64.tinypic.com/20f45eh.jpg
public void FillDataGrid(Dictionary<string, List<string>> valuedict)
{
myGrid.Columns.Clear();
var dt = new DataTable();
DataRow row = null;
foreach(KeyValuePair<string, List<string>> entry in valuedict)
{
dt.Columns.Add(entry.Key);
foreach (string word in entry.Value)
{
row = dt.NewRow();
row[entry.Key] = word;
}
dt.Rows.Add(row);
}
myGrid.ItemsSource = dt.AsDataView();
}
答案 0 :(得分:3)
您当前的代码正在尝试将非表格数据放入表格结构中。
在创建所有列之前,您正在向DataTable中添加行。
通过外部foreach循环的第一次迭代,您只有1列(header1)。然后在内部foreach循环内部,向DataTable中添加行,该行只有一列。因此,在第一次迭代后,您的表格将如下所示:
header1
value1fromList
value2fromList
value3fromList
在通过外部foreach循环的第二次迭代中,您将添加第二列(header2),然后向DataTable中添加现在有2列的行。
在第二次迭代结束时,通过外部foreach循环,您的表格将如下所示:
header1 header2
1) value1fromList
2) value2fromList
3) value3fromList
4) value1fromList2
5) value2fromList2
当你将header3添加到混音时,header3的值的数据将占用第6,7和8行。
现在我并不完全确定你要做什么,但听起来你正试图让网格看起来像这样:
header1(key) header2(key) header3(key)
1) value1fromList value1fromList value1fromList
2) value2fromList value2fromList value2fromList
3) value3fromList value3fromList
一种方法是首先将所有列添加到表中,然后迭代最大列表,同时将所有3列值添加到行中。
foreach(KeyValuePair<string, List<string>> entry in valuedict)
{
dt.Columns.Add(entry.Key);
}
然后,您将迭代最大列表中的项目数,同时为每列添加值。
int i = 0;
foreach (string word in MyLongestList.Value)
{
row = dt.NewRow();
row[firstList.key] = firstList[i];
row[secondList.key] = secondList[i];
row[MyLongestList.key] = word;
dt.Rows.Add(row);
i++;
}
就个人而言,我并不认为您的演示文稿结构能准确反映数据。您将非表格数据放入表格结构中。但是,它可以做到。