DBGrid中的事件控制Button的Enabled(199分)

  • 主题发起人 主题发起人 restart0
  • 开始时间 开始时间
R

restart0

Unregistered / Unconfirmed
GUEST, unregistred user!
我用DBGrid中的OnColEnter事件写如下代码:
procedure TForm2.DBGrid1ColEnter(Sender: TObject);
begin
if ((Table1.Bof<>True)and(Table1.Eof<>True)) then
begin
Button1.Enabled:=True;
Button2.Enabled:=True;
end
else
if Table1.Bof=True then
begin
Button1.Enabled:=False;
Button2.Enabled:=True;
end
else
if Table1.Eof=True then
begin
Button1.Enabled:=True;
Button2.Enabled:=False;
end;
end;
希望能控制“上移”,“下移”两个Button的Enabled。也就是说如果当前记录是第一条,
那么上移按钮(button1)无效,如果当前记录是最后一条,下移按钮(button2)无效,
而且能随着DBGrid中当前记录的变化而变化!现在我的程序做不到,问题出在哪里呢??
我心烦了,不想看了~~~~~~~~~~~~
 
记录移动产生dateset的AfterScroll事件,OnColEnter不合适吧?
 
对,同意楼上意见
使用DataSet的BeforeScroll和AfterScroll处理比较好
 
在DBGrid的KekUp事件中写代码也可以
 
还是不行!窗体创建的时候正常,有一个按钮的Enabled是False,当前记录移到中间也正常,
2个按钮都Active了,可是这之后他们就不改变了,永远都是Active的!怎么回事呢?
 
你应该多用showmessage调试,经我调式,发现无论鼠标点哪里,都满足

if ((Table1.Bof<>True)and(Table1.Eof<>True)) then
begin
showmessage('xxxxxxxxx')
Button1.Enabled:=True;
Button2.Enabled:=True;
end

所以只能说明eof不是最后一条记录,bof不是第一条记录。
查资料,eof是文件尾,不是最后一条记录,正确的代码如下:
procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Table1.recno=1 then
begin
showmessage('tou');
Button1.Enabled:=False;
Button2.Enabled:=True;
end
else
if Table1.recno=table1.RecordCount then
begin
showmessage('wei');
Button1.Enabled:=True;
Button2.Enabled:=False;
end
else
begin
showmessage('zhong') ;
Button1.Enabled:=True;
Button2.Enabled:=true;
end;
end;
 
procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
begin
if table1.RecNo=1 then showmessage('first')
else if table1.RecNo=table1.RecordCount then showmessage('last')
end;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
896
SUNSTONE的Delphi笔记
S
S
回复
0
查看
873
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部