delphi 在cxgrid中展示物料各自的显示精度
效果图:

数据库设计:

设计视图:

方法一使用TcxEditRepository控件.双击TcxEditRepository控件,进行添加.这里选择新增货币格式.

为每一种样式设置属性:

接下来关联需要设置的列.但不是在面板里直接设置,而是通过代码

选中需要设置的列,然后在其OnGetProperties事件中完成业务代码:
procedure TForm1.cxGrid1DBTableView1QtyGetProperties(Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord; var AProperties: TcxCustomEditProperties); var index, Accuracy: Integer; begin index := cxGrid1DBTableView1DisplayAccuracy.Index; //精度所在的列号 Accuracy := cxGrid1DBTableView1.DataController.GetValue(ARecord.RecordIndex, index); //取得精度值 case Accuracy of //根据精度值,设置不同的显示样式 0: //无小数位 AProperties := cxEditRepository1CurrencyItem0.Properties; 1: //一位小数,以下以此类推.因为精度值的取值范围是0-4,所以不会出现其他值 AProperties := cxEditRepository1CurrencyItem1.Properties; 2: AProperties := cxEditRepository1CurrencyItem2.Properties; 3: AProperties := cxEditRepository1CurrencyItem3.Properties; 4: AProperties := cxEditRepository1CurrencyItem4.Properties; end; end;
这里说明一下,DisplayAccuracy这个字段必须要有,但你可以设置它的visible为false隐藏它.否则你只能通过其他途径来取它的精度值.
以上方法由@拉夫 提供

方法二是使用@淡淡的风 给出的方案,一眼看上去没什么问题

但是当你点到数据时:

为了解决这个缺陷,我尝试给OldQty列设置了Properties属性:

然后它就变成了这样: 没选中时,显示是正常的,但是点中了之后,不管你精度是多少,都会变成4位小数.用户在输入时,也是可以输入四位数的...虽然排序和使用过虑器都不会乱,但这不是我想要的结果(有其他方法可以弥补这个不足,但是我这里不想展开)

业务代码需要用到列的OnGetDataText事件,具体代码如下:
procedure TForm1.cxGrid1DBTableView1OldQtyGetDataText(Sender:TcxCustomGridTableItem; ARecordIndex: Integer; var AText: string); var fValue: Double; j,k:integer; function SetFormat(f: Double; i: Integer): string; var s: string; ef: Extended; begin s := '#.' + StringOfChar('0', i); // StringOfChar('A', 5)=> 'AAAAA' 返回5个连续的A ef := StrToFloat(FloatToStr(f)); //防止浮点计算产生的误差 Result := FormatFloat(s, eF); end; begin j:=cxGrid1DBTableView1OldQty.Index ; //原始数据所在的列,这一列可以隐藏起来,不要显示 k:= cxGrid1DBTableView1DisplayAccuracy.Index ; //精度值所在的列,这一列可以隐藏起来,不要显示 fValue:= cxGrid1DBTableView1.DataController .Values[ARecordIndex,j]; //取回数值 AText:=SetFormat(fValue,cxGrid1DBTableView1.DataController .Values[ARecordIndex,k]); //格式化 end;
第三种方法也是由 @淡淡的风 提供的方案(大佬就是大佬),和方法2很类似,只是新增了一个字段,但是方法二里面的问题仍然存在




浙公网安备 33010602011771号