在字典中的列表中填充dataGridView吗?

时间:2019-02-19 10:33:07

标签: c# dictionary datagridview populate

我有一本这样的字典:

Dictionary<string, List<string>>

添加像这样的键和值之后:

resultDic.Add(s, new List<string>());
    foreach (DataRow row in schemaTable.Rows)
    {
     resultDic[s].Add(row[3].ToString());
    }

然后,我想同时显示字符串值和字典列表中的各个值。为此,我尝试这样做:

        dataGridView2.DataSource = Controller.GetMetaDataTables2().Select(x 
        => new { ColumnName = x.Key, Table = x.Value[0] }).ToList();
        dataGridView2.Show();

GetMetaDataTables2返回一个类似于上面的字典。问题是当我想显示整个列表时,索引[0]显然只给我第一个值。我想迭代,但是我不知道该怎么做。我才刚刚开始理解LINQ表达式。有什么想法吗?

感谢所有帮助!

更新:在Markus帮助下进行了修复。我只用了一次他的解决方案。代替y.ToArray()我只需要打印y。像这样:

   dataGridView2.DataSource = Controller.GetMetaDataTables2()
   .SelectMany(x => x.Value.Select(y => new { ColumnName = x.Key, Table = 
   y }))
   .ToArray();
   dataGridView2.Show();

1 个答案:

答案 0 :(得分:1)

您可以使用SelectMany方法来使列表变平,例如:

resultDic
  .SelectMany(x => x.Value.Select(y => new { ColumnName = x.Key, Table = y.ToArray() }))
  .ToArray();

对于

  

A-“ A.1”,“ A.2”
  B-“ B.1”,“ B.2”
  C-“ C.1”,“ C.2”

这将导致

  

A-A.1
  A-A.2
  B-B.1
  B-B.2
  C-C.1
  C-C.2

为了在GridView中显示它,代码应该是

dataGridView2.DataSource = Controller.GetMetaDataTables2()
  .SelectMany(x => x.Value.Select(y => new { ColumnName = x.Key, Table = y.ToArray() }))
  .ToArray();
dataGridView2.Show();