如何格式化 JSON 值并在 datagridview 中显示
How to format JSON value and display in datagridview
在我的asp.net网页API,JSON字符串return如下。
[
{
"Company": "Company A",
"ProjectName": "Project A",
"Developer": "No developer assigned",
"Hour": 0,
"Overtime": 0,
"Contribution": "0"
},
{
"Company": "Company A",
"ProjectName": "Project B",
"Developer": "paul",
"Hour": 36,
"Overtime": 27,
"Contribution": "71.5909%"
},
{
"Company": "Company A",
"ProjectName": "Project B",
"Developer": "kalpa",
"Hour": 16,
"Overtime": 9,
"Contribution": "28.4091%"
},
{
"Company": "Company B",
"ProjectName": "Project C",
"Developer": "shane",
"Hour": 40,
"Overtime": 14,
"Contribution": "78.2609%"
},
{
"Company": "Company B",
"ProjectName": "Project C",
"Developer": "kal",
"Hour": 10,
"Overtime": 5,
"Contribution": "21.7391%"
},
{
"Company": "Company C",
"ProjectName": "Project D",
"Developer": "No developer assigned",
"Hour": 0,
"Overtime": 0,
"Contribution": "0"
},
{
"Company": "Company D",
"ProjectName": "Project E",
"Developer": "No developer assigned",
"Hour": 0,
"Overtime": 0,
"Contribution": "0"
}
]
当我在我的 C# 桌面应用程序上使用 API 并显示 JSON 字符串时,如下图所示:
这是我的 C# 桌面应用程序代码,用于在 setGrid
方法中显示 datagridview
中的 JSON 对象,它以 JSON 对象作为参数并将其显示在 datgridview
.
public void setGrid(string obj)
{
try
{
var json = JsonConvert.DeserializeObject<dynamic>(obj);
dataGridView1.DataSource = json;
}
catch (Exception)
{
throw;
}
}
但我需要将此结果显示为下图。我需要合并公司列以获得相同的值。此图像显示预期结果:
我该怎么做?
所以看到图像后,任务似乎是System.Linq
的需要。您首先需要对数据进行分组。
我创建了一种方法,可以为我提供您提到的 JSON
。
public static IEnumerable<ProjectInfo> GetResponse()
{
IEnumerable<ProjectInfo> items = new List<ProjectInfo>();
using (StreamReader r = new StreamReader("Data.json"))
{
string json = r.ReadToEnd();
items = JsonConvert.DeserializeObject<List<ProjectInfo>>(json);
}
return items;
}
ProjectInfo
class定义如下:
public class ProjectInfo
{
public string Company { get; set; }
public string ProjectName { get; set; }
public string Developer { get; set; }
public int Hour { get; set; }
public int Overtime { get; set; }
public string Contribution { get; set; }
}
现在开始使用代码,使用 System.Linq
将您的 list
分组到 Company
属性
var APIResponse = GetResponse();
var grouped = APIResponse.GroupBy(x => x.Company);
现在你有一个分组的集合。使用下面的模板作为 GridView
protected override void OnCellPainting(
DataGridViewCellPaintingEventArgs args)
{
base.OnCellPainting(args);
args.AdvancedBorderStyle.Bottom =
DataGridViewAdvancedCellBorderStyle.None;
// Ignore column and row headers and first row
if (args.RowIndex < 1 || args.ColumnIndex < 0)
return;
if (IsRepeatedCellValue(args.RowIndex, args.ColumnIndex))
{
args.AdvancedBorderStyle.Top =
DataGridViewAdvancedCellBorderStyle.None;
}
else
{
args.AdvancedBorderStyle.Top = AdvancedCellBorderStyle.Top;
}
}
来源:
在我的asp.net网页API,JSON字符串return如下。
[
{
"Company": "Company A",
"ProjectName": "Project A",
"Developer": "No developer assigned",
"Hour": 0,
"Overtime": 0,
"Contribution": "0"
},
{
"Company": "Company A",
"ProjectName": "Project B",
"Developer": "paul",
"Hour": 36,
"Overtime": 27,
"Contribution": "71.5909%"
},
{
"Company": "Company A",
"ProjectName": "Project B",
"Developer": "kalpa",
"Hour": 16,
"Overtime": 9,
"Contribution": "28.4091%"
},
{
"Company": "Company B",
"ProjectName": "Project C",
"Developer": "shane",
"Hour": 40,
"Overtime": 14,
"Contribution": "78.2609%"
},
{
"Company": "Company B",
"ProjectName": "Project C",
"Developer": "kal",
"Hour": 10,
"Overtime": 5,
"Contribution": "21.7391%"
},
{
"Company": "Company C",
"ProjectName": "Project D",
"Developer": "No developer assigned",
"Hour": 0,
"Overtime": 0,
"Contribution": "0"
},
{
"Company": "Company D",
"ProjectName": "Project E",
"Developer": "No developer assigned",
"Hour": 0,
"Overtime": 0,
"Contribution": "0"
}
]
当我在我的 C# 桌面应用程序上使用 API 并显示 JSON 字符串时,如下图所示:
这是我的 C# 桌面应用程序代码,用于在 setGrid
方法中显示 datagridview
中的 JSON 对象,它以 JSON 对象作为参数并将其显示在 datgridview
.
public void setGrid(string obj)
{
try
{
var json = JsonConvert.DeserializeObject<dynamic>(obj);
dataGridView1.DataSource = json;
}
catch (Exception)
{
throw;
}
}
但我需要将此结果显示为下图。我需要合并公司列以获得相同的值。此图像显示预期结果:
我该怎么做?
所以看到图像后,任务似乎是System.Linq
的需要。您首先需要对数据进行分组。
我创建了一种方法,可以为我提供您提到的 JSON
。
public static IEnumerable<ProjectInfo> GetResponse()
{
IEnumerable<ProjectInfo> items = new List<ProjectInfo>();
using (StreamReader r = new StreamReader("Data.json"))
{
string json = r.ReadToEnd();
items = JsonConvert.DeserializeObject<List<ProjectInfo>>(json);
}
return items;
}
ProjectInfo
class定义如下:
public class ProjectInfo
{
public string Company { get; set; }
public string ProjectName { get; set; }
public string Developer { get; set; }
public int Hour { get; set; }
public int Overtime { get; set; }
public string Contribution { get; set; }
}
现在开始使用代码,使用 System.Linq
将您的 list
分组到 Company
属性
var APIResponse = GetResponse();
var grouped = APIResponse.GroupBy(x => x.Company);
现在你有一个分组的集合。使用下面的模板作为 GridView
protected override void OnCellPainting(
DataGridViewCellPaintingEventArgs args)
{
base.OnCellPainting(args);
args.AdvancedBorderStyle.Bottom =
DataGridViewAdvancedCellBorderStyle.None;
// Ignore column and row headers and first row
if (args.RowIndex < 1 || args.ColumnIndex < 0)
return;
if (IsRepeatedCellValue(args.RowIndex, args.ColumnIndex))
{
args.AdvancedBorderStyle.Top =
DataGridViewAdvancedCellBorderStyle.None;
}
else
{
args.AdvancedBorderStyle.Top = AdvancedCellBorderStyle.Top;
}
}
来源: