如何格式化 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;
}

ProjectInfoclass定义如下:

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;
   }
}

来源:

Link 1 Link 2 Link 3