VFP表格的刷新问题
为什么在每次刷新表格的时候,表格的格式总会自已改变??
(我已经在属性中把全部的格式都设为固定的了)
我是用SQL语句
比如说我想找值在1和3之间的所有数据,让它在表格中显示,(此时出现的格式和设计是一样))
可是当我再次查找值为5和8之间的数据时,在表格显示的格式就不一样,
显示出来的格子都比原来的小,好象都是和字段长度相同?
有什么办法可以解决呢
或者要用视图??Top
两个解决方法:
1、用create cursor创建一个同构cursor,将此cursor与grid绑定,
以后用zap,append from命令将sql结果集追加到该cursor.
2、写一个form方法以编程方式实现sql语句的结果与grid的绑定,
每次执行sql后调用该方法。
推荐使用方式1。(不知7.0是否解决了这个问题,它的sql语句产生的cursor可以定义为可读写的)
VF7.0的SELECT命令可以生成可更新的临时表Top
我采用的方法是:
把表格的数据源设为sql语句,然后在表格的refresh事件中
this.recordsource=‘select ***** into cursor custs‘
表格的各项的长度不会有很大的变化。
Top
假如你选择的列是每次一样的。那么你可以添加固定列的grid,并且你也可以设置字体,宽度等。
代码:thisform.grid1.recordsource=\"\"&&在重新生成数据源前,要先关闭表格的数据源
select * from table into cursor custs
thisform.grid1.recordsource=\"select * from custs into custs\"
如果选择的列是不一定的。
thisform.grid.recordsource=\"\"
thisform.grid1.columncount=-1
select * from table into cursor custs
thisform.grid1.recordsource=\"select * from custs into custs\"
this.refreshTop
方法2:在form上定义一个method:gridbinding,
仿照下列代码定义对grid的绑定,按你的方式,
每次数据源变化之后就调用这个方法。
(编程编程,不编怎么成!)
-------------------------------------------------------------
with THISFORM.grid1
.RecordSource = \"kmlist\"
.COLUMNCOUNT = 7
.column1.header1.CAPTION = ‘科目代码‘
.column2.header1.CAPTION = ‘科目名称‘
.column3.header1.CAPTION = .column4.header1.CAPTION = .column5.header1.CAPTION = .column6.header1.CAPTION = .column7.header1.CAPTION = .column1.Controlsource = \"kmdm\"
.column2.Controlsource = \"km_chi_mc\"
.column3.Controlsource = \"wbdm\"
.column4.Controlsource = .column5.Controlsource = ‘币种‘
‘标识‘
‘总分类帐‘
‘日记帐‘
‘建帐年份‘
\"iif(km_bs=2,‘明细‘,‘汇总‘)\"
\"iif(zz_bs,‘是‘,‘ ‘)\"
.column6.Controlsource = \"iif(rjz_bs,‘是‘,‘ ‘)\"
.column7.Controlsource = \"curyear\"
.column1.WIDTH = 100
.column2.WIDTH = 120
.column3.WIDTH = 60
.column4.WIDTH = 40
.column5.WIDTH = 100
.column6.WIDTH = 100
.column7.WIDTH = 100
.setall(\"format\
.gridlinecolor=rgb(64,128,128)
.setall(\"FONTSIZE\
.setall(\"alignment\
.readonly=.t.
endwith
thisform.refresh
首先确定一下,出现这个问题的原因是Grid的数据源\"丢失\"了,等你再重新设置的时候,Grid认为换了一个新的数据源,所以一切都重来了,你的Grid的表格自然变了。这个也不能算是vfp的BUG。
net_steven(吃素的狼) 的办法麻烦了一点,不过确实是保证不出问题。我的办法是在你刷新数据之前,先把Grid的数据源置空(Grid.RecordSorce=\"\"),新的数据取来后,重新设置Grid.RecordSource和Column.ControlSource,然后刷新一下就行了(我一般把这一段程序作一个专用的方法——From.GirdReset())。Top
先设置好表格的数据源,以及列的宽度,字体等,recordsourcetype=别名,recordsource=\"lsb\"
lsb先假设是该表格要显示的数据源
表单load时,确保该数据源已生成。
点查询
thisform.grid1.recordsource=‘‘
select rsda.bh,xm,xb from table where aa>1 into cursor lsb
thisform.grid1.recordsource=\"lsb\"
注意,你表格比如要显示bh,xm两列,但数据源中必须要有sno,bh,xm三列,则你必须写成bh,xm,sno,而不能写成sno,bh,xm,把显示不用的列写后面。Top
我也有一段代码、贴出来凑个数。(放在refresh前)
clmnwdth=90
FOR nCnt = 1 to THISFORM.grid1.ColumnCount
do case
case nCnt = 1
this.Columns(nCnt).width = clmnwdth
otherwise
this.Columns(nCnt).width = clmnwdth/3*4
endcase
ENDFOR
因篇幅问题不能全部显示,请点此查看更多更全内容