[英]C#: Bind Dictionary<string, List<string>> to DataTable
I have one dictionary Like 我有一本字典
Dictionary<string, List<string>> first=new Dictionary<string, List<string>>();
I want to bind this dictionary to data table such that data table ColumnName should be key of the dictionary and respective columns should contain their dictionary values. 我想将此字典绑定到数据表,以便数据表ColumnName应该是字典的键,并且各个列应包含其字典值。 What I tried: 我试过的
Dictionary<string, List<string>> some= new Dictionary<string, List<string>>();
System.Data.DataTable dt = new System.Data.DataTable();
foreach (var entry in some)
{
if (entry.Value.Count > 0)
{
dt.Columns.Add(entry.Key);
//entry.Value.count is not same for all entry.Key
foreach (var value in entry.Value)
{
DataRow row = dt.NewRow();
row[entry.Key] = value;
dt.Rows.Add(row);
}
}
}
Surely I know, above code is having some errors to achieve following result DesirrdResultImage any suggestions? 我当然知道,以上代码在实现以下结果DesirrdResultImage时有一些错误吗?
Here's a possible solution (note that I don't think this is the best way to do this, but I hope it'll help guide you): 这是一个可能的解决方案(请注意,我认为这不是实现此目的的最佳方法,但我希望它会为您提供指导):
Dictionary<string, List<string>> some = new Dictionary<string, List<string>>
{
{ "Key1", new List<string>
{
"Val1_1",
"Val2_1",
"Val3_1"
}
},
{ "Key2", new List<string>
{
"Val1_2",
"Val2_2",
"Val3_2"
}
}
};
DataTable dt = new DataTable();
var keys = some.Keys;
// Add all the columns from the beginning
dt.Columns.AddRange(keys.Select(key => new DataColumn(key)).ToArray());
// Get the rows number using the Max count of the lists (assuming the length of the lists might change, otherwise just use some.Values[0].Count)
int rowsNumber = some.Values.Max(s => s.Count);
for (int i = 0; i < rowsNumber; i++)
{
var row = dt.NewRow();
// Set all the values depending on the keys
foreach (var key in keys)
{
if (some[key].count <= i)
break;
row[key] = some[key][i];
}
dt.Rows.Add(row);
}
dataGridView1.DataSource = dt;
The result is: 结果是:
Check if No row or less than Values than add Value to New row else Add value to existing row 检查是否没有行或少于“将值添加到新行的值”,否则将值添加到现有行
DataTable dt = new DataTable();
int i = 0;
foreach (var entry in some)
{
if (entry.Value.Count > 0)
{
dt.Columns.Add(entry.Key);
DataRow row;
//entry.Value.count is not same for all entry.Key
foreach (var value in entry.Value)
{
int ValueCount = entry.Value.Count();
if (dt.Rows.Count <= ValueCount)
{
row = dt.NewRow();
row[entry.Key] = value;
dt.Rows.Add(row);
}
else
{
row = dt.Rows[i];
row[entry.Key] = value;
i++;
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.