VFP表格的刷新问题

来源:百度文库 编辑:神马文学网 时间:2024/04/23 15:13:32
为什么在每次刷新表格的时候,表格的格式总会自已改变??
(我已经在属性中把全部的格式都设为固定的了)
我是用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   =   "iif(km_bs=2,‘明细‘,‘汇总‘)"
.column5.Controlsource   =   "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","ZKT","column")
.gridlinecolor=rgb(64,128,128)
.setall("FONTSIZE",9,"header")
.setall("alignment",2,"header")
.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