Winform DataGridView空间绘制单元格内容

在项目中遇到一个需求,需将特定单元格内data显示为修饰后的内容,但不改变原始值(例如将data内的时间单位为ms,单元格需显示ms或者根据值显示特定名称)

CellValueNeeded,该事件在控件刷新,需要为单元格填充数据时发生,其参数e返回当前单元格的行和列,根据行和列,获取需要的值,赋给e的Value属性。触发前值条件:1.将VirtualMode属性要设置为true 2.datagridview的列是非绑定列(即不能设置datagridview的DataPropertyName属性),并且这个列必须可见

1.订阅事件 base.CellValueNeeded += new System.Windows.Forms.DataGridViewCellValueEventHandler(this.ProcessStepsRecordGrid_CellValueNeeded);

2.重写ProcessStepsRecordGrid_CellValueNeeded方法

protected virtual void ProcessStepsRecordGrid_CellValueNeeded(object sender, System.Windows.Forms.DataGridViewCellValueEventArgs e)
{
foreach (var v in data) { //将时间显示为s为单位 if (v.Title== time) { e.Value = (Double.Parse(v.value) / 1000).ToString(); }
//值类型的state显示为特定名称
else if (v.Title== state) { switch (v.Value) { case 1: e.Value = "state1"; break; case 2: e.Value = "state2"; break; case 3: e.Value = "state3"; break; }
//正常显示
else e.Value = v.Value; } }

 

posted @ 2023-06-28 16:38  寒冬将至  阅读(87)  评论(0)    收藏  举报