2016-08-16 82 views
0

我正在创建一个DataGrid,该字段由包含字符串作为键和List作为值的字典中的值填充。关键应该是列的标题和列表的内容是该列的内容:从上到下填充DataGrid

header1(key)  header2(key)  header3(key) 
value1fromList value1fromList value1fromList 
value2fromList value2fromList value2fromList 
value3fromList      value3fromList 

对于这一点,我创建一个充满这个值和作为的ItemSource为一个DataTable数据网格。我的问题是我不知道如何以这种方式填充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

你能给我们一个你的代码产生的例子吗?你已经向我们展示了你想要的东西。你目前得到什么? –

+0

添加了截图 – Scorch

回答

3

您当前的代码试图把非表格数据转换为表格结构。

在创建所有列之前,您正在向DataTable添加行。

你的第一次迭代通过你的外部foreach循环,你只有1列(header1)。然后在你的内部foreach循环中,你将行添加到你的DataTable中,那时只有一列。所以,你的第一个循环之后,你的表格看起来就像这样:

header1  
value1fromList 
value2fromList 
value3fromList 

在你第二次迭代通过外foreach循环要添加第二列(标题2),然后将行添加到您的数据表,现在有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    

一种方式W¯¯应该首先将所有列添加到表中,然后迭代最大的列表,同时将所有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++; 
} 

就我个人而言,我认为您的演示文稿的结构不能准确反映数据。您正在将非表格数据放入表格结构中。但这是可以完成的。

+0

谢谢,你的回答是一个很大的帮助。我现在明白这些行是如何填充的。 – Scorch