仅用C#编码两个月:我有一个字典类型为:
Dictionary<string, Dictionary<string, decimal>>
我已经能够将其编写如下:
R&D
Trainer 3000
Developer 6000
Consultant 0
Dev
Trainer 0
Developer 4000
Consultant 5000
如您所见,内部字典具有相同的“键”。我试图通过以下方式将它们放入dataTable:
var columns = l.GroupBy(d => d.Department, (key, items) => key).ToList();
dt.Columns.Add("Function");
foreach (var column in columns)
dt.Columns.Add(column);
foreach (var dict in result2)
{
Console.WriteLine(dict.Key );
foreach (var dict2 in dict.Value)
{
DataRow row2 = dt.NewRow();
row2["Function"] = dict2.Key;
row2[dict.Key] = dict2.Value;
dt.Rows.Add(row2);
Console.WriteLine(" " + dict2.Key + "\t" + dict2.Value);
}
}
dataTable在GridView中的结果:
|---------------------|--------------|-------------|
| Function | R&D | Dev |
|---------------------|--------------|-------------|
| Trainer | 3000 | |
|---------------------|--------------|-------------|
| Developer | 6000 | |
|---------------------|--------------|-------------|
| Consultant | 0 | |
|---------------------|--------------|-------------|
| Trainer | | 0 |
|---------------------|--------------|-------------|
| Developer | | 4000 |
|---------------------|--------------|-------------|
| Consultant | | 5000 |
|---------------------|--------------|-------------|
首选结果:
|---------------------|--------------|-------------|
| Function | R&D | Dev |
|---------------------|--------------|-------------|
| Trainer | 3000 | 0 |
|---------------------|--------------|-------------|
| Developer | 6000 | 4000 |
|---------------------|--------------|-------------|
| Consultant | 0 | 5000 |
|---------------------|--------------|-------------|
我想用内部字典的不同键填充dataTable的第一列,并基于它填充其他列,或者基于初始dataTable创建所需的dataTable。
任何帮助将不胜感激。
答案 0 :(得分:1)
我最近在使用2个不同的DataTables时不得不做这种事情,因为我自己也不是专家,我不能说这是最快的方法,但这应该对您有用。
string find = "Function = '" + dict2.Key + "'";
DataRow[] foundRows = result.Select(find);
if (foundRows.Length > 0)
{
DataRow row1 = foundRows[0];
row1[dict.Key] = dict2.Value;
}
else
{
DataRow row2 = dt.NewRow();
row2["Function"] = dict2.Key;
row2[dict.Key] = dict2.Value;
dt.Rows.Add(row2);
}
编辑:您应该将此代码放在最后的foreach中。