如何将JToken中"c"数组转为List并绑定到DataGridView?
解决方法:将JToken中的"c"数组映射到DataGridView的List数据源
很简单,咱们一步步来实现:
1. 提取"c"数组
首先从你的onerow对象里取出对应的数组,它是一个JArray类型:
using Newtonsoft.Json.Linq; // 从onerow中获取"c"数组 JArray cArray = (JArray)onerow["c"];
2. 创建数据模型(可选但推荐)
为了让DataGridView的列更清晰,咱们可以定义一个模型类来对应每个列的内容:
public class VehicleDataRow { public string VehicleName { get; set; } public string Time1 { get; set; } public string Time2 { get; set; } public string EmptyColumn { get; set; } public string Value { get; set; } public string FuelConsumption { get; set; } public string Separator1 { get; set; } public string Separator2 { get; set; } public string LastColumn { get; set; } }
当然你也可以直接用匿名类型,不过模型类更便于后续维护和扩展。
3. 生成List数据源
把cArray里的每个元素映射到模型的属性,然后打包成List:
// 创建List并添加映射好的数据行 var dataRows = new List<VehicleDataRow> { new VehicleDataRow { VehicleName = cArray[0].ToString(), Time1 = cArray[1].ToString(), Time2 = cArray[2].ToString(), EmptyColumn = cArray[3].ToString(), Value = cArray[4].ToString(), FuelConsumption = cArray[5].ToString(), Separator1 = cArray[6].ToString(), Separator2 = cArray[7].ToString(), LastColumn = cArray[8].ToString() } };
如果你的onerow是多个的话,只需要循环处理每个JToken并添加到List里就行。
4. 绑定到DataGridView
最后直接把List赋值给DataGridView的DataSource:
dataGridView1.DataSource = dataRows;
用匿名类型的简化写法(不需要模型类)
如果只是临时使用,不想定义模型类,也可以直接用匿名对象:
var dataRows = new List<object> { new { 车辆名称 = cArray[0].ToString(), 时间1 = cArray[1].ToString(), 时间2 = cArray[2].ToString(), 空列 = cArray[3].ToString(), 数值 = cArray[4].ToString(), 油耗 = cArray[5].ToString(), 分隔符1 = cArray[6].ToString(), 分隔符2 = cArray[7].ToString(), 最后一列 = cArray[8].ToString() } }; dataGridView1.DataSource = dataRows;
这样DataGridView的列名会直接显示你定义的中文名称,更直观。
内容的提问来源于stack exchange,提问作者Abigor31
相关产品推荐
相关产品推荐

