从上到下填充数据网格
本文关键字:网格 数据网 数据 填充 从上到下 | 更新日期: 2023-09-27 18:02:33
我正在创建一个DataGrid,该DataGrid由包含字符串作为键和列表作为值的字典中的值填充。键应该是列的标题,列表的内容是该列的内容:
header1(key) header2(key) header3(key)
value1fromList value1fromList value1fromList
value2fromList value2fromList value2fromList
value3fromList value3fromList
为此,我创建了一个用这些值填充的DataTable,并将其用作DataGrid的ItemSource。我的问题是,我不知道如何填写数据表这种方式。我的解决方案只是用一些空白填充数据表并覆盖现有值。
http://oi64.tinypic.com/20f45eh.jpgpublic 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();
}
您当前的代码正试图将非表格数据放入表格结构中。
在创建所有列之前正在向DataTable添加行。
在外部foreach循环的第一次迭代中,正好有1列(header1)。然后在内部foreach循环中,将行添加到此时只有一列的DataTable中。因此,在第一次迭代之后,您的表将看起来像这样:
header1
value1fromList
value2fromList
value3fromList
在通过外部foreach循环的第二次迭代中,您正在添加第二列(header2),然后向现在有2列的DataTable添加行。
在通过外部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++;
}
就我个人而言,我认为你的演讲结构没有准确地反映数据。将非表格数据放入表格结构中。但是,这是可以做到的