下面这个例子既可以让大家学会Json数据的解析和dataGridView表格的简单操作,设置值和清除表格,删除选中项,显示行数。
目录
1、准备工作
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
//表格数据的下标
public class ARR
{
public const int CITY = 0;
public const int DATE = 1;
public const int WEATHER = 2;
public const int TEMPERATURE = 3;
public const int DIRECT = 4;
}
//未来天气类
public class Future
{
public string city { get; set; } //城市
public string date { get; set; } //时间日期
public string temperature { get; set; } //气温
public string weather { get; set; } //天气情况
public string direct { get; set; } //风向
}
List<Future> FutureWeatherInfo = new List<Future>();
2、开始工作
这个是我们要解析的数据
{
"reason": "查询成功!",
"result": {
"city": "广州",
"realtime": {
"temperature": "22",
"humidity": "96",
"info": "多云",
"wid": "01",
"direct": "东南风",
"power": "2级",
"aqi": "34"
},
"future": [{
"date": "2023-04-02",
"temperature": "20\/24℃",
"weather": "阵雨",
"wid": {
"day": "03",
"night": "03"
},
"direct": "持续无风向"
}, {
"date": "2023-04-03",
"temperature": "21\/25℃",
"weather": "阵雨转雷阵雨",
"wid": {
"day": "03",
"night": "04"
},
"direct": "持续无风向"
}, {
"date": "2023-04-04",
"temperature": "21\/26℃",
"weather": "雷阵雨转中雨",
"wid": {
"day": "04",
"night": "08"
},
"direct": "持续无风向"
}, {
"date": "2023-04-05",
"temperature": "18\/24℃",
"weather": "中雨转阵雨",
"wid": {
"day": "08",
"night": "03"
},
"direct": "南风转北风"
}, {
"date": "2023-04-06",
"temperature": "16\/22℃",
"weather": "阵雨转多云",
"wid": {
"day": "03",
"night": "01"
},
"direct": "北风转持续无风向"
}]
},
"error_code": 0
}
往期文章里提到了如何解析json的数据,这里就不再说了。
把字符串转化成一个对象,再逐步把这个对象中的数据解析下来
//用json格式解析数据 strWebData是指上面一大段的字符串
JObject tt = (JObject)JsonConvert.DeserializeObject(strWebData);
string strCity = tt["result"]["city"].ToString();
//解析数据到链表里面
string strfuture = tt["result"]["future"].ToString();
//转换成JArray格式
JArray jsonArr = (JArray)JsonConvert.DeserializeObject(strfuture);
JObject[] DataObj = new JObject[jsonArr.Count];//这两种方法是一样的效果
//将数组的每一个成员转换成JObject格式,并存起来
for (int i = 0; i < jsonArr.Count; i++)
{
DataObj[i] = (JObject)jsonArr[i];//使用其中一种方法就行了
}
for (int i = 0; i < DataObj.Length; i++)
{
Future futureitem = new Future();
futureitem.city = strCity;
futureitem.date = DataObj[i]["date"].ToString();
futureitem.weather = DataObj[i]["weather"].ToString();
futureitem.temperature = DataObj[i]["temperature"].ToString();
futureitem.direct = DataObj[i]["direct"].ToString();
FutureWeatherInfo.Add(futureitem);
}
SetWeather(FutureWeatherInfo);//把列表里面的数据设置到表格上
3、把列表的数据设置再表格上
//设置表格的值
void SetWeather(List<Future> FutureWeatherInfo)
{
for(int i = 0;i< FutureWeatherInfo.Count;i++)
{
dataGridView1.Rows.Add();
dataGridView1.Rows[dataGridView1.RowCount - 1 ].Cells[ARR.CITY].Value = FutureWeatherInfo[i].city;
dataGridView1.Rows[dataGridView1.RowCount - 1 ].Cells[ARR.DATE].Value = FutureWeatherInfo[i].date;
dataGridView1.Rows[dataGridView1.RowCount - 1 ].Cells[ARR.TEMPERATURE].Value = FutureWeatherInfo[i].temperature;
dataGridView1.Rows[dataGridView1.RowCount - 1 ].Cells[ARR.WEATHER].Value = FutureWeatherInfo[i].weather;
dataGridView1.Rows[dataGridView1.RowCount - 1 ].Cells[ARR.DIRECT].Value = FutureWeatherInfo[i].direct;
}
}
如图所示
4、表格显示行号的方法
C#的dataGridView没有默认显示行号的方法,只能通过在表格的第一列中绘画出文本的方式去显示行号。网上还有其他的方法,可以去看一下其他的方法。注意-这里用到了表格的一个方法RowPostPaint事件去触发显示行号;
//显示行号
private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, dataGridView1.RowHeadersWidth - 4, e.RowBounds.Height);
TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), dataGridView1.RowHeadersDefaultCellStyle.Font, rectangle, dataGridView1.RowHeadersDefaultCellStyle.ForeColor,
TextFormatFlags.VerticalCenter | TextFormatFlags.Right);//行号自动显示
}
5、删除表格所有行及清空列表数据
//清除表格和列表数据
void RemoWeatherInfo()
{
if(dataGridView1.RowCount - 1 > 0)
{
dataGridView1.Rows.Clear();//清除表格的所有行
FutureWeatherInfo.Clear();//清除列表的所有项
}
}
6、删除选中行及删除列表的指定项
//删除选中行
void RemoOnceRowsInfo()
{
dataGridView1.Rows.Remove(dataGridView1.CurrentRow);//删除表格选中行
FutureWeatherInfo.RemoveAt(dataGridView1.CurrentRow.Index);//删除列表指定项
}
7、表头设置
如果没有表头的可以这样添加表头,添加表格的列。参数是表格列的变量名和文本。
dataGridView1.Columns.Add("City", "城市");
dataGridView1.Columns.Add("DateTime", "时间");
dataGridView1.Columns.Add("temperature", "天气");
dataGridView1.Columns.Add("weather", "温度");
dataGridView1.Columns.Add("direct", "风向");
下面是设置表格,例如想修改表格的头的文本
dataGridView1.Columns["City"].HeaderText = "卡号";
dataGridView1.Columns["DateTime"].HeaderText = "姓名";
dataGridView1.Columns["temperature"].HeaderText = "上机日期";
dataGridView1.Columns["weather"].HeaderText = "上机时间";
dataGridView1.Columns["direct"].HeaderText = "下机日期";
效果图
共勉!!!!!