从上到下填充数据网格

本文关键字:网格 数据网 数据 填充 从上到下 | 更新日期: 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.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();
        }

从上到下填充数据网格

您当前的代码正试图将非表格数据放入表格结构中。

在创建所有列之前正在向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++;
}

就我个人而言,我认为你的演讲结构没有准确地反映数据。将非表格数据放入表格结构中。但是,这是可以做到的