从上到下填充DataGrid

时间:2016-08-16 14:59:41

标签: c# wpf datatable datagrid

我正在创建一个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();
        }

1 个答案:

答案 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++;
}

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