【问题标题】:Fill a DataGrid from top to down从上到下填充 DataGrid
【发布时间】:2016-08-16 14:59:41
【问题描述】:

我正在创建一个 DataGrid,它由字典中的值填充,该字典包含一个字符串作为键,一个列表作为值。键应该是列的标题,列表的内容是该列的内容:

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

为此,我正在创建一个填充了这些值并用作 DataGrid 的 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();
        }

【问题讨论】:

  • 你能给我们一个例子来说明你的代码产生了什么吗?你已经向我们展示了你想要什么。你目前得到了什么?
  • 添加截图

标签: c# wpf datatable datagrid


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,您的回答帮了大忙。我现在明白如何填充行了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
  • 2015-02-12
相关资源
最近更新 更多