-
竭诚为您提供优质文档
< br>/
双击可除
vfp
表格的刷新问题
p>
篇一:
VFp
的表格透析
< br>
VFp
的表格透析
1
Rmh
于
20xx-12-1712:41:05
发表:
作者
Vladgrynchyshyn
译者
Rmh
VFp
中的表格第一部分
什么是表格和什么时候使用它
表格控件是一组允许在一个表格一样的可卷动列表中
显示数据的
VFp
对象
.
表格由表格对象自己和一组列组成
.
各
列必须有一个
header
对象和在
表格列中显示数据的控件
.
表
格列中的
控件用于显示和编辑数据
.
表格是一个带网格线条
的矩形
,
和顶部的标题
,<
/p>
卷动条和一些其它有用的东西
,
如记
p>
录标记
,
删除标记
,
分隔条等
.
说实话
,
表
格显示数据不象
excelsheet
那样自由
.
表格
要求用
VFp
记录源
(
别名
)
来显示一些东西
.
要在同一列的不
同行中显示不同类型的数据是困难的
.
表格中的所
有行的高
度都是相同的
,
并且表格中一
列中的所有行的宽度也是相同
第
1
页
共
20
页
的
.
当然还
有一些其它相当奇怪的和不可思议的限制
,
除非
我们记住表格是一个真实的基于早期版本的
Foxpro
的浏览
窗口来编写的控件
.
这一事实
回答了许多关于表格的奇怪的
东西和行为的′为什么′
.
尽管有许多的麻烦
,
表格还是相
当有用的控件并在受到
VFp
程序员的欢迎
,
因此也有许多的
处理和方案来打破表格的限制
并用它来产生更好的效果
.
局
限或奇怪
的东西将不再是决定是否使用表格的关键
.
表格控件对于在一个简洁的表单中显示
(
浏览
)
数据是
有用的
(
每页显示大量数据
).<
/p>
表格对于搜索和定位数据比弹
式菜单或整页的下拉列表好
.
持久稳固的使用表格作为定位
数据不是一个好
的主意
,
因为表格通常占用许多空间
.
许多
应用程序有一个表格作为一个主要的控制表单
-
复杂的带有
许多功能的可显示子表单来进行数据编
辑的表格
.
表格对于所有类型的规则的只读数据是有用的
.
使用表
p>
格进行数据编辑不是一个好主意
.
在表格中
进行数据编辑的
好处仅仅是易于组织和管理应用程序
.
在表格中进行数据编
辑时如果要打破
VFp
p>
表格的限制会有许多问题
.
但是
,
例如发
票或订单表单的行项
,
使用表格来进行编辑是更好的
,
用户
也会感到更舒服
.
这样的表单是一
个例外
;
不要仅仅因为表
格对于编辑数
据时的简单就把它放在每一个表单中
.
当你这
< br>样做时
,
你会很快发现自己处于麻烦之中
,
因为表格是如此
复杂且易于失去控制的控件
.
这将要求你付出更多的努力来
第
2
页
共
20
页
指出问题
,
找出解决方案和修正更多的问题
.
通常
,
数据编辑
使用文本框显示字段和带有定位
,
保存
/
恢复和一些其它特
定按钮工具栏来移动记录的的表单
.
为表格生
成一个这样的
表单是花费大量时间的一种方法
.
当然
,
如果你有时间并喜
欢玩
耍怪异的东西
,
表格是一种消磨时光并找出方案和处理
办法的最好的控件
.
表格自动进行列的重绑定
表格中最常出现的奇怪的东西是列
的
controlsources
的自动改变
< br>.
你会发现突然表格列显示了其它的不是你在列
的
controlsource
属性中指定的数据
.
另外
,
列中显示的数据
的顺序不是你重新安排过的顺序
.
为什么会这样<
/p>
====
===============================================
===
因为表
格的
Recordsource
属性在设计时被改变
.
在表格
的
Record
source
属性被改变后所有的
controlsource
值被
清除了
.
在此情况下制作一个这些值的备份
,
通常是在列的
comment
属性中
.
因为表格的
Recordsourc
e
属性在运行时被改变
.
好了
,
如果你要这样做
,
保
存所有的
controlsources,
然后恢复它
们
.
可能的原因是表格被重建了
.
关于这一点将在下一章中
说明
.
第
3
页
共
20
页
===============
====================================
===
该行为的副作用并不严重
.
通常显示的数据没有改变
,
< br>除非表格有一些复杂的功能和结构体系
.
例如
,
列值显示的
是表达式
-
表达式将丢失并只显示字段
.
对于用户
来说在表
格列中显示
id
字段
(
主关键字段
)
也不是
一件好事
.
最危险的
是当你在表格中有
一些不同的控件时
.
当列中有一个复选框
控件时
,
但表格决定使用字符型字段作为该列的
controlsource
时
,VFp
将显示一个关于数据类型失配的错
误
:
′控件不支持该数据类型′
.
无论是上述何种情况
,
当以任何方式改变
recordsource
时
p>
,
都有消除表格重建的方案
.
以下示例代码用列的
comment
属性保存
controlsourc
es
并恢复它们
.
′后到完全恢复
controlsource
之间
,
不要执行任何表
单上的可视控件或表格的
refreshin
g.
否则如果你在表格列
中使用了自定义控件
< br>,
你将可能收到一个′控件不支持该数
据类型′错误
p>
.
另一种避
免表格重构的方法是使用表格的
beforeRowcolchange
事件
.beforeRowcolchange
事件在
每次
表格将要重构时被激发
.
它在包括
表格别名关闭
第
4
页
共
20
页
时
,sqlpass-throug
h
游标重获取等时发生
.
无论表格是否
可
见
,
具有焦点及表格的配置
.
最令人惊奇的是放置
nodeFault
p>
到该事件中以使数据改变时避免表格重构
.
但是
,
在此情况
下表格会显示不可思议
的错误行为
.
< br>freshing=.t.
表格的
recordsour
ce
属
性将使用该空的游标别名
.
p>
然后
,
当你打开真正的数据时
,
指
定一个空的串到表格的
recordsource,
打开数据然后再次指
定真正的数据
别名到表格的
recordsource.
别一种处理方法
p>
是放置一个不可见的在它的
init
事件中
创建空的游标的自
定义控件
.
但是
p>
,
要保证该控件的
init
事件在表格的
init
之
前激
发
,
否则将会发生重构
.
第二种方法是在运行时添加表
格到表单
.
创建一个表格类并不在设计时把它放入表单
.
在<
/p>
init
事件代码中放入一个
addob
ject
方法调用来在要使用的
别名准备好后添加表格到表单<
/p>
.
3.<
/p>
表格的自己重构在列数改变为零或
-1
发
生
.
我希望你
不要这样做
(
指设置
columncount
< br>为
0
或
-1),
你这样做了吗
;)
总之
,
p>
它可以用于简单的可以打开任何表并在表格中浏览它
们的管理性表单
.
但是
,
由于
重构的原因
,
这样的表格具有很
大的功
能限制
,
或者所有的表格功能将放入到类中并在运行
时的重构后添加到表格
.
4.
表格的自己重构将在
recordsource
超出范围时发生
.
p>
这通常发生在当
recordsource
指定在一个数据工作期
,
但表
第
5
页
共
20
页