代码之家  ›  专栏  ›  技术社区  ›  Sachith Wickramaarachchi

如何格式化JSON值并在datagridview中显示

  •  0
  • Sachith Wickramaarachchi  · 技术社区  · 7 年前

    在我的asp。net web API,JSON字符串返回如下。

    [
      {
        "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字符串时,如下图所示:

    enter image description here

    这是我的C#桌面应用程序代码,用于显示JSON对象 datagridview setGrid 方法,该方法将JSON对象作为参数并显示在 datgridview

    public void setGrid(string obj)
    {
        try
        {
            var json = JsonConvert.DeserializeObject<dynamic>(obj);
            dataGridView1.DataSource = json;
        }
        catch (Exception)
        {
            throw;
        }
    }
    

    但我需要将此结果显示为下图。我需要为相同的值合并公司列。此图显示了预期结果:

    enter image description here

    我该怎么做?

    1 回复  |  直到 7 年前
        1
  •  0
  •   iam.Carrot    7 年前

    因此,在看到图像后,任务似乎是 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 类别定义如下:

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

    现在进入代码,使用 系统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