在项目中遇到一个需求,需将特定单元格内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; } }
标签:case,CellValueNeeded,单元格,Value,DataGridView,break,ProcessStepsRecordGrid,Winform From: https://www.cnblogs.com/yuewei-bravo/p/17511836.html