这几天在帮女朋友做个小东西
如此原始单据(这个是外销的,呵呵,帮女朋友作做)
packNo code Color S M L XL ONESIZE TOTAL G.W. N.W.
1 IBBFLC602 AZURE/OZON 5 26 5 18 12.00 10.00
2 IBBFLC602 AZURE/OZON 26 26 12.00 10.00
3 IBBFLC602 AZURE/OZON 45 26 71 12.00 10.00
4 IBBFLC602 AZURE/OZON 26 26 12.00 10.00
5 IBBFLC602 AZURE/OZON 10 26 36 12.00 10.00
6 IBBFLC602 AZURE/OZON 26 23 12.00 10.00
7 IBBFLE01 BLACK 26 26 12.00 10.00
8 IBBFLE01 BLACK 26 3 29 12.00 10.00
9 IBBFLC602 AZURE/OZON 10 26 88 12.00 10.00
IBBFLC602 AZURE/OZON 26
IBBFLE01 BLACK 26
10 IBBFLE01 BLACK 26 3 29 12.00 10.00 最终结果: **进出口有限公司
** COMPANY LIMITED
INVOICE NO:GI00105001N12
S/C NO: GI00105001
DATE:JUL.28, 2005
Packing List
packNo code Color S M L XL ONESIZE TOTAL G.W. N.W.
1 IBBFLC602 AZURE/OZON 5 26 5 36 12.00 10.00
2 IBBFLC602 AZURE/OZON 26 26 12.00 10.00
3 IBBFLC602 AZURE/OZON 45 26 71 12.00 10.00
4 IBBFLC602 AZURE/OZON 26 26 12.00 10.00
5 IBBFLC602 AZURE/OZON 10 26 36 12.00 10.00
6 IBBFLC602 AZURE/OZON 26 26 12.00 10.00
7 IBBFLE01 BLACK 26 26 12.00 10.00
8 IBBFLE01 BLACK 26 3 29 12.00 10.00
9 IBBFLC602 AZURE/OZON 10 26 88 12.00 10.00
IBBFLC602 AZURE/OZON 26
IBBFLE01 BLACK 26
10 IBBFLE01 BLACK 26 3 29 12.00 10.00
问题:
估计看出来了,工厂出来的数据可能total计算得不准确,要我写个程序,
1÷导入工厂数据
2÷自动计算total
3÷能在程序界面对于导入的数据进行修改(修改数量,并自动计算total),并能撤销或保存修改
3÷格式化为标准的packinglist
4÷导出为excel表格
5÷要求程序能正常打印Packinglist我只做了第一二步,第三步就死翘翘了,我发现数据如果使用数据敏感控件
(我用cxgrid,所以我系统能继续保留使用cxgrid,要未保存数据的情况下进行直接格和格之间的计算很麻烦,我至今没找到如何取得正在写入一个cell的值)
当然有人说DataController.Values[x,y]就可以,呵呵,试试看吧,要真的做到Excel那样一写入移开Total字段就自动计算,并不保存到数据集,等到确定保存还是撤销的时候才决定是保存还是取消,我弄了一下午还没搞定(当然我cxgrid不是很了解,请指教了)
这个功能如果能实现了,其他估计不是问题,请各位大侠给点意见,通宵了,今晚。。
如此原始单据(这个是外销的,呵呵,帮女朋友作做)
packNo code Color S M L XL ONESIZE TOTAL G.W. N.W.
1 IBBFLC602 AZURE/OZON 5 26 5 18 12.00 10.00
2 IBBFLC602 AZURE/OZON 26 26 12.00 10.00
3 IBBFLC602 AZURE/OZON 45 26 71 12.00 10.00
4 IBBFLC602 AZURE/OZON 26 26 12.00 10.00
5 IBBFLC602 AZURE/OZON 10 26 36 12.00 10.00
6 IBBFLC602 AZURE/OZON 26 23 12.00 10.00
7 IBBFLE01 BLACK 26 26 12.00 10.00
8 IBBFLE01 BLACK 26 3 29 12.00 10.00
9 IBBFLC602 AZURE/OZON 10 26 88 12.00 10.00
IBBFLC602 AZURE/OZON 26
IBBFLE01 BLACK 26
10 IBBFLE01 BLACK 26 3 29 12.00 10.00 最终结果: **进出口有限公司
** COMPANY LIMITED
INVOICE NO:GI00105001N12
S/C NO: GI00105001
DATE:JUL.28, 2005
Packing List
packNo code Color S M L XL ONESIZE TOTAL G.W. N.W.
1 IBBFLC602 AZURE/OZON 5 26 5 36 12.00 10.00
2 IBBFLC602 AZURE/OZON 26 26 12.00 10.00
3 IBBFLC602 AZURE/OZON 45 26 71 12.00 10.00
4 IBBFLC602 AZURE/OZON 26 26 12.00 10.00
5 IBBFLC602 AZURE/OZON 10 26 36 12.00 10.00
6 IBBFLC602 AZURE/OZON 26 26 12.00 10.00
7 IBBFLE01 BLACK 26 26 12.00 10.00
8 IBBFLE01 BLACK 26 3 29 12.00 10.00
9 IBBFLC602 AZURE/OZON 10 26 88 12.00 10.00
IBBFLC602 AZURE/OZON 26
IBBFLE01 BLACK 26
10 IBBFLE01 BLACK 26 3 29 12.00 10.00
问题:
估计看出来了,工厂出来的数据可能total计算得不准确,要我写个程序,
1÷导入工厂数据
2÷自动计算total
3÷能在程序界面对于导入的数据进行修改(修改数量,并自动计算total),并能撤销或保存修改
3÷格式化为标准的packinglist
4÷导出为excel表格
5÷要求程序能正常打印Packinglist我只做了第一二步,第三步就死翘翘了,我发现数据如果使用数据敏感控件
(我用cxgrid,所以我系统能继续保留使用cxgrid,要未保存数据的情况下进行直接格和格之间的计算很麻烦,我至今没找到如何取得正在写入一个cell的值)
当然有人说DataController.Values[x,y]就可以,呵呵,试试看吧,要真的做到Excel那样一写入移开Total字段就自动计算,并不保存到数据集,等到确定保存还是撤销的时候才决定是保存还是取消,我弄了一下午还没搞定(当然我cxgrid不是很了解,请指教了)
这个功能如果能实现了,其他估计不是问题,请各位大侠给点意见,通宵了,今晚。。
保存用: ADOQuery1.UpdateBatch(arAll);
取消用: ADOQuery1.CancelBatch(arAll);然后在 AdoQuery 中选择 字段1,字段2,字段3 双击OnSetText事件
procedure TTemplateForm1.cdsCZHTTotalSetText(Sender: TField; const Text: String);
var
lInput:string;
begin
lInput:=Trim(Text);
if lInput='' then lInput:='0'
Sender.AsString:=lInput;
Sender.DataSet.FieldByName('totle').AsFloat :=
Sender.DataSet.FieldByName('字段1').AsFloat +
Sender.DataSet.FieldByName('字段2').AsFloat +
Sender.DataSet.FieldByName('字段3').AsFloat ;
end;
Sender.DataSet.FieldByName('totle').AsFloat :=
Sender.DataSet.FieldByName('字段1').AsFloat +
Sender.DataSet.FieldByName('字段2').AsFloat +
Sender.DataSet.FieldByName('字段3').AsFloat ;
total字段不会及时更新,虽然dataset已经是我们想要的值了,如何跟新??
不明白你的意思?
字段的readonly是为false啊,怎么搞的,呵呵
在 Sender.DataSet.FieldByName('totle').AsFloat :=
Sender.DataSet.FieldByName('字段1').AsFloat +
Sender.DataSet.FieldByName('字段2').AsFloat +
Sender.DataSet.FieldByName('字段3').AsFloat ;
的时候total的值是我们想要的,计算出来的新值,但一离开当前的这条记录,total又返回原来的值了。真是郁闷。
其他字段都很好的。
把原本string类型的Total强制转换为int类型,所以数据无法更新怎么ds就这么笨? 转化过来的数据就没法保存??呵呵,有办法吗? 还是需要该access表
Sender.DataSet.FieldByName('totle').AsFloat :=
Sender.DataSet.FieldByName('字段1').AsFloat +
Sender.DataSet.FieldByName('字段2').AsFloat +
Sender.DataSet.FieldByName('字段3').AsFloat ;
Sender.DataSet.FieldByName('totle').AsString :=
FloatToStr(Sender.DataSet.FieldByName('字段1').AsFloat +
Sender.DataSet.FieldByName('字段2').AsFloat +
Sender.DataSet.FieldByName('字段3').AsFloat) ;
我都去了devexpress的网站了,还是每找到,呵呵,估计太简单了,我刚用,发现这东西不错,就是最基本的取得值都弄不出来?!请帮忙。
增加了:
1、分组行是否隐藏
2、分组字段是否隐藏
3、分组行的(+/-)号是否显示
4、分组行缩排的功能
5、多个字段做为一个组来同级分组
(比如将编号和名称合并做为同一级来分组)
下载地址:
http://www.dcmscn.cn/dispbbs.asp?boardid=8&id=308