DevExpress GridControl能否将首列设为字段名列展示JSON数据?
用DevExpress GridControl实现字段名-数据的两列展示方案
GridControl完全支持你要的这种“字段名+对应数据”的两列布局,下面是具体实现步骤:
1. 定义数据模型
先创建一个简单的实体类,用来存储键值对形式的字段名和数据:
public class ETFFieldData { public string FieldName { get; set; } public object FieldValue { get; set; } }
2. 解析JSON数据
把你提供的JSON解析成List<ETFFieldData>集合,这里以Newtonsoft.Json为例(用System.Text.Json逻辑类似):
// 假设你的JSON字符串存放在jsonStr变量中 var jsonObj = JsonConvert.DeserializeObject<JObject>(jsonStr); var dataObj = jsonObj["data"] as JObject; List<ETFFieldData> fieldList = new List<ETFFieldData>(); foreach (var prop in dataObj.Properties()) { fieldList.Add(new ETFFieldData { FieldName = prop.Name, FieldValue = prop.Value.ToObject<object>() }); }
3. 配置GridControl
设计器操作(新手友好)
- 从工具箱拖一个GridControl到窗体上,命名为
gcETFInfo - 点击GridControl右上角的智能标签,选择选择数据源,将其绑定到上面生成的
fieldList(或者先定义一个BindingSource绑定到fieldList,再关联GridControl) - 自动生成列后,修改第一列的FieldName为
FieldName,列标题改为“字段名”;第二列的FieldName为FieldValue,列标题改为“数据值” - 打开GridView的智能标签,进入选项:
- 取消勾选允许编辑,防止用户修改数据
- 可关闭列标题排序,避免不必要的交互
- 调整列宽,让内容完整显示
代码绑定(可选)
如果想用代码完成配置,在窗体的Load事件里添加:
private void Form1_Load(object sender, EventArgs e) { // 先完成步骤2的JSON解析,得到fieldList gcETFInfo.DataSource = fieldList; GridView gvETFInfo = gcETFInfo.MainView as GridView; // 清空自动生成的列(如果有的话) gvETFInfo.Columns.Clear(); // 添加字段名列 GridColumn colFieldName = new GridColumn(); colFieldName.FieldName = "FieldName"; colFieldName.Caption = "字段名"; colFieldName.OptionsColumn.AllowEdit = false; gvETFInfo.Columns.Add(colFieldName); // 添加数据值列 GridColumn colFieldValue = new GridColumn(); colFieldValue.FieldName = "FieldValue"; colFieldValue.Caption = "数据值"; colFieldValue.OptionsColumn.AllowEdit = false; gvETFInfo.Columns.Add(colFieldValue); // 自动调整列宽 gvETFInfo.BestFitColumns(); }
额外提示
- 如果需要给字段名添加中文别名(比如把
up_l显示为“上涨阈值”),可以在解析JSON时替换字段名,或者给实体类加DisplayName属性后配置GridView列显示 - 对于数值类型的
FieldValue,可以在GridView列属性的DisplayFormat中设置格式(比如保留4位小数)
内容的提问来源于stack exchange,提问作者Jiangcx
相关产品推荐
相关产品推荐

