JsonConvert对象到datagridview c#
我已经反序列化并将JSON字符串转换为对象 我想知道如何将所有这些数据放入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 {
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);
}
}