您的当前位置:首页正文

VFP表格的刷新问题

2020-10-20 来源:步旅网


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

因篇幅问题不能全部显示,请点此查看更多更全内容