Json数据解析 + C#的dataGridView表格简单操作

下面这个例子既可以让大家学会Json数据的解析和dataGridView表格的简单操作,设置值和清除表格,删除选中项,显示行数。

目录

1、准备工作

2、开始工作 

3、把列表的数据设置再表格上

 4、表格显示行号的方法

 5、删除表格所有行及清空列表数据

6、删除选中行及删除列表的指定项

 7、表头设置


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 = "下机日期";

效果图

共勉!!!!! 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三目条件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值