如何在加载时修改DevExpress GridView中的指定列值
替换DevExpress GridView中c04_oprogrs列的显示值
嘿,我刚好处理过类似的需求,给你几个实用的解决方案,都是DevExpress GridView里常用的方法,你可以根据自己的场景选:
方法一:用CustomColumnDisplayText事件(最推荐)
这个方法不用修改数据源或SQL,直接在GridView的界面层处理显示逻辑,非常灵活。
步骤:
- 找到你的GridView控件,要么在设计器里双击
CustomColumnDisplayText事件,要么在代码里手动绑定事件; - 在事件处理方法里,判断当前列是否是目标列,然后根据
c04_oprogrs的值替换显示文本:
private void gridView1_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e) { // 匹配目标列的FieldName(确保和你GridView里的列字段名一致) if (e.Column.FieldName == "c04_oprogrs") { var rawValue = e.Value; if (rawValue != null) { switch (rawValue.ToString()) { case "1": e.DisplayText = "Take"; break; case "2": e.DisplayText = "Available"; break; // 其他值可以保留原始显示,或者自定义默认文本 default: e.DisplayText = rawValue.ToString(); break; } } } }
方法二:在SQL查询时直接处理
如果希望数据源本身就返回替换后的值(比如多个地方都要用到这个显示逻辑),可以直接在SQL语句里用CASE表达式转换:
SELECT -- 其他需要查询的字段 CASE c04_oprogrs WHEN 1 THEN 'Take' WHEN 2 THEN 'Available' ELSE CAST(c04_oprogrs AS VARCHAR) -- 其他值保持原样 END AS c04_oprogrs_display, -- 其他字段 FROM your_table_name
之后直接把GridView的列绑定到c04_oprogrs_display字段就行,不用再写界面层的代码。
方法三:添加未绑定列(Unbound Column)
如果不想修改原列的显示,也可以新增一个未绑定列来展示转换后的值:
步骤:
- 在GridView的列集合里新增一列,设置
FieldName为StatusDisplay,UnboundType为String; - 处理
CustomUnboundColumnData事件来赋值:
private void gridView1_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e) { // 匹配新增的未绑定列 if (e.Column.FieldName == "StatusDisplay" && e.IsGetData) { // 获取原始字段的值 var oprogrsValue = gridView1.GetListSourceRowCellValue(e.ListSourceRowIndex, "c04_oprogrs"); if (oprogrsValue != null) { switch (oprogrsValue.ToString()) { case "1": e.Value = "Take"; break; case "2": e.Value = "Available"; break; default: e.Value = oprogrsValue.ToString(); break; } } } }
个人最推荐第一种方法,因为它不影响数据源,只在当前GridView里生效,修改起来也方便。
内容的提问来源于stack exchange,提问作者shaikh diya
相关产品推荐
相关产品推荐

