user3166111
user3166111

Reputation: 153

How to display JSON data in a DataGridView in WinForms?

This is the JSON data that I have:

{"testId":1,"testName":"HTML","minScore":20,"score":40,"date":"12-2-2014","status":"PASSED"},
{"testId":1,"testName":"JAVA","minScore":20,"score":10,"date":"12-2-2014","status":"FAILED"}

How can I show it in a DataGridView?

Upvotes: 8

Views: 55372

Answers (3)

NicholaiRen
NicholaiRen

Reputation: 377

There's a simpler way to do this. You don't need to create a new class. Simply do:

DataTable dataTable = (DataTable)JsonConvert.DeserializeObject(jsonString, (typeof(DataTable)));
dataGridView.DataSource = dataTable;

No need for a custom class. You'll still need Newtonsoft though.

Upvotes: 7

Ismail Arafath
Ismail Arafath

Reputation: 1

  1. using Newtonsoft.Json.Linq;
  2. using System.Net;
void get_response()
{
     WebClient wp = new WebClient();
     string url="your json url";
     var response=wp.DownloadString(url)
     get_data(response)
}


void get_data(string response)
{
    datagridview.Rows.clear();`enter code here`
    JArray fetch= JArray.Parse(response);
    if(fetch.Count()>0)
    {
        for(int i=0;datagridview.Rows.Count>i;i++)
        {
            int n=datagridview.Rows.Add();
            datagridview.Rows[n].Cells[0].Value=fetch[i]["Json 
            ObjectName1"].ToString();
        }
    }
}

Upvotes: 0

Mike Perrenoud
Mike Perrenoud

Reputation: 67898

So this is pretty straight forward:

  1. Declare a class to deserialize into.
  2. Grab the Json.NET NuGet Package.
  3. Deserialize the string.
  4. Bind the DataGridView.

Declare a class to deserialize into

public class JsonResult
{
    public int testId { get; set; }
    public string testName { get; set; }
    public int minScore { get; set; }
    public int score { get; set; }
    public DateTime date { get; set; }
    public string status { get; set; }
}

Grab the Json.NET NuGet Package

Pull the Json.NET NuGet Package in from here http://www.nuget.org/packages/Newtonsoft.Json/6.0.3.

Deserialize the string

var result = JsonConvert.DeserializeObject<List<JsonResult>>(input);

Bind the DataGridView

dataGridView.DataSource = result;

NOTE: this is the most primitive way of binding to the grid. There are many more options that you can leverage. One that comes to mind is, turning off AutoGenerateColumns and defining your own columns; designer-driven work so it wouldn't affect the code I've provided.

Upvotes: 35

Related Questions