Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JsonConvert对象到datagridview c#_C#_Json_Datagridview - Fatal编程技术网

JsonConvert对象到datagridview c#

JsonConvert对象到datagridview c#,c#,json,datagridview,C#,Json,Datagridview,我已经反序列化并将JSON字符串转换为对象 我想知道如何将所有这些数据放入DataGridView 我搜索了论坛,但找不到合适的答案。以下是我所拥有的: JSON: 课程: public class Prime { public string name { get; set; } public ramps[] ramps { get; set; } public int response_code { get; set; } } public class ramps {

我已经反序列化并将JSON字符串转换为对象

我想知道如何将所有这些数据放入
DataGridView

我搜索了论坛,但找不到合适的答案。以下是我所拥有的:

JSON:

课程:

public class Prime
{
    public string name { get; set; }
    public ramps[] ramps { get; set; }
    public int response_code { get; set; }
}

public class ramps
{
    public string color { get; set; }
    public points[] points { get; set; }
}

public class points
{
    public int time { get;set;}
    public int intensity { get; set;}
}
C#代码:

if(response2.StatusCode==HttpStatusCode.OK)
{     
var arr=JsonConvert.DeserializeObject(responseFromServer);
Dg_View.DataSource=arr;
}
不幸的是,上面的代码没有用任何数据填充
DataGridView
Dg_View
)。调试
arr
我可以看到所有格式正确的JSON


我希望
color
是行名,其中
time
是列标题,每个框中的值是
intensity

Prime
对象,在上面的代码中称为
arr
,将包含多个
Ramps
对象,因此,似乎每个“坡道”对象都有一个网格。该网格将有一个列来显示每个
Ramps
对象的不同“颜色”。 由于每个
渐变
对象可能包含多个
对象,因此可以使用另一个网格为第一个网格中选择的每个
颜色
显示不同的
时间
强度

下图展示了上述方法。左侧的网格显示每个
渐变
对象的不同“颜色”属性。右侧网格显示左侧网格中当前选定行的
对象的不同
时间
强度
属性

如果用户在左侧的网格中选择了不同的“颜色”,则右侧的网格将更新以反映所选的
color
s

下面的代码使用类型为
Prime
的全局变量
PrimeObject
。它包含所有数据,并且需要对
Ramps
SelectionChanged
事件可见,以便使用
Ramps
网格中的选定颜色更新
网格。当
渐变
网格中的选择发生变化时,将检查有效的选定单元格,然后获取选定单元格行索引,以确定要在
网格中显示的

Prime PrimeObject;

private void btnReadJson_Click(object sender, EventArgs e) {
  try {
    string json = File.ReadAllText(jsonFile);
    PrimeObject = JsonConvert.DeserializeObject<Prime>(json);
    dgvRamps.DataSource = PrimeObject.ramps;
    lblColorGroup.Text = "Prime name: " + PrimeObject.name + " - Response Code: " + PrimeObject.response_code;
  }
  catch (Exception ex) {
    MessageBox.Show("Error reading JSON file: " + jsonFile + Environment.NewLine + ex.Message);
  }
}

private void dgvColor_SelectionChanged(object sender, EventArgs e) {
  try {
    if (dgvRamps.SelectedCells.Count > 0) {
      int colorIndex = dgvRamps.SelectedCells[0].RowIndex;
      dgvPoints.DataSource = PrimeObject.ramps[colorIndex].points;
    }
  }
  catch (Exception ex) {
    MessageBox.Show("SelectionChanged: Error: " + ex.Message);
  }
}
素数对象;
私有void btnRechson_单击(对象发送者,事件参数e){
试一试{
字符串json=File.ReadAllText(jsonFile);
PrimeObject=JsonConvert.DeserializeObject(json);
dgvRamps.DataSource=PrimeObject.ramps;
lblColorGroup.Text=“素数名称:”+PrimeObject.name+”-响应代码:“+PrimeObject.Response\u代码;
}
捕获(例外情况除外){
Show(“读取JSON文件时出错:”+jsonFile+Environment.NewLine+ex.Message);
}
}
私有void dgvColor_selection已更改(对象发送方,事件参数e){
试一试{
如果(dgvRamps.SelectedCells.Count>0){
int colorIndex=dgvRamps.SelectedCells[0]。行索引;
dgvPoints.DataSource=PrimeObject.ramps[colorIndex]。点;
}
}
捕获(例外情况除外){
MessageBox.Show(“SelectionChanged:Error:+ex.Message”);
}
}

希望这有帮助。

欢迎来到StackOverflow。我编辑了你的问题,以减少大量不必要的代码。当你问起问题时,尽量简化代码,让200行重复和重复是没有意义的,对读者来说这只是浪费时间。一个有用的阅读:。您有层次结构数据,因此您应该尝试主/细节表单方法(您至少需要两个datagridView,一个用于坡道,一个用于点)看起来相当复杂。。我感到惊讶的是,没有一种简单的方法可以将数据从对象发布到datagridview。。当数据是xml格式时,我使用嵌套的for循环实现了这一点。从您发布的代码来看,不清楚您希望
DataGridView
看起来像什么。您的评论:“我希望颜色是行名称,时间是列标题,每个框中的值是强度。”…我不确定您将如何执行此操作…例如,第0行是“深红色”,您希望时间是列标题,其中有多行/列的
对象。您是否可以绘制或显示网格的外观,因为您当前的描述难以描绘。从发布的代码中,要将
ramp
对象放入网格,您可以使用:
Dg_View.DataSource=arr.ramps
…要获取第一个
ramp
对象的点,可以使用:
Dg_View.DataSource=arr.ramps[0]。点。因为集合中有一个集合,所以不清楚您希望网格是什么样子。正如@caner指出的,这似乎是一种主/细节方法,至少有两个不同的网格。我在dGview_points.DataSource=PrimeObject.ramps[colorIndex].points一行中得到“未设置对象引用”;似乎找不到PrimeObject对象。正如我在回答
PrimeObject
中所述,PrimeObject需要是一个全局变量。我尝试将其添加到类的顶部,但仍然出现上述错误。下面的代码snipper-名称空间AI_Prime{/////MainForm的说明。///公共部分类MainForm:Form{Prime PrimeObject;public MainForm(){///Windows窗体设计器支持需要InitializeComponent()调用//InitializeComponent();/////TODO:在InitializeComponent()调用之后添加构造函数代码。//}您应该更新原始问题中的代码。您的最后一条评论没有任何用处。对不起,我不知道如何正确格式化。我对您的代码的问题是,我不知道我在代码中的位置
if (response2.StatusCode == HttpStatusCode.OK)
{     
    var arr = JsonConvert.DeserializeObject<Prime>(responseFromServer);     
    Dg_View.DataSource = arr;
}
Prime PrimeObject;

private void btnReadJson_Click(object sender, EventArgs e) {
  try {
    string json = File.ReadAllText(jsonFile);
    PrimeObject = JsonConvert.DeserializeObject<Prime>(json);
    dgvRamps.DataSource = PrimeObject.ramps;
    lblColorGroup.Text = "Prime name: " + PrimeObject.name + " - Response Code: " + PrimeObject.response_code;
  }
  catch (Exception ex) {
    MessageBox.Show("Error reading JSON file: " + jsonFile + Environment.NewLine + ex.Message);
  }
}

private void dgvColor_SelectionChanged(object sender, EventArgs e) {
  try {
    if (dgvRamps.SelectedCells.Count > 0) {
      int colorIndex = dgvRamps.SelectedCells[0].RowIndex;
      dgvPoints.DataSource = PrimeObject.ramps[colorIndex].points;
    }
  }
  catch (Exception ex) {
    MessageBox.Show("SelectionChanged: Error: " + ex.Message);
  }
}