dbgrid控制问题(300分)

  • 主题发起人 主题发起人 yobdrow
  • 开始时间 开始时间
Y

yobdrow

Unregistered / Unconfirmed
GUEST, unregistred user!
我想屏蔽dbgrid自动添加新记录的作用,改成必须执行insert或append操作才可以

请赐教
 
KeyDown事件
或用EHLIB控件
 
可以屏蔽向下键,但第一个记录怎么办

ehlib哪里有
 
先判断一下记录集,为空时使DBGrid失效,不就可以解决第一条记录的问题了吗?:)
 
你將DBGRID的ReadOnly設成True﹐然后只用自己的按鈕控制即可。哈哈﹐給分﹗
 
等我试验了给分,300分这么容易??????
 
用两个表。一个放更新前的数据,一个放更新后的数据。
用按钮控制dbgrid的对应和数据的更新。
 
dadabox的说法应该是对的,设置dbgrid的ReadOnly属性为True。
sword_liu的方法可行性太差。
 
READONLY同时引起不能对记录的编辑,不一定可取,可以从DATESET和DBGRID的键盘事件里
想想办法。
 
我回答的:
在DbGrid中,如何使键盘的方向键无效???
http://www.delphibbs.com/delphibbs/dispq.asp?lid=665976
 
设一全局变量 ManualAppend
在DataSet的BeforeInsert事件中:
If not ManualAppend then
Abort;
 
继续呀,都不是最后的办法
 
你將DBGRID的ReadOnly設成True﹐在form中定义一个flag:boolean
接着在按钮点击事件时,来进行判断
 
你將DBGRID的ReadOnly設成True即可。
 
你的操作要求是什么,能说明白点吗? 把数据源设成只读不是也可以吗?处了你append
或是insert时。
 
我只是想让dbgrid不能自动增加记录,但可以编辑
 
不难嘛!只要处理数据集控件的BeforeInsert事件就行了!Look:
新建一个Application,加上一个Table,一个DataSource,一个DBGird,一个按钮
分别连好DBGrid->DataSource->Table->你的数据库表!
在Tabel的BeforeInsert事件中写:
procedure TForm1.Table1BeforeInsert(DataSet: TDataSet);
begin
if ActiveControl is TDBGrid then abort;
end;
在Button的OnClick事件中写:
procedure TForm1.Button1Click(Sender: TObject);
begin
table1.Insert;
end;
好,运行看看吧,是不是你要的效果?
DBGird可以编辑,但不会自动插入新记录,只有按下Button才行!

以上只是以Table举例,但同样可以用在Query,ADOTable,adoQuery等DataSet中,
这种方法的限制是不能直接用DBNavigator来增加记录(当然浏览是可以的!),
只能用有焦点的控制如:Button,BitBtn之类的东西来做添加按钮,我想应该
不是太大的问题!

 
我的办法:如果是最后一条记录,则向下不能加记录,是空则可:
在DBGrid的keyup事件中:
if key = KEY_DOWN then
if query.eof and Query.RecordCount>0 then
Query.Prior;
简单吧,其实我一直在用。
 
楼上不能处理第一条记录的问题

我用全局参数和杜宝的方法搞定

谢谢大家
 
多人接受答案了。
 
后退
顶部