关于DBGrid的一个小问题?(50分)

  • 主题发起人 主题发起人 doud
  • 开始时间 开始时间
D

doud

Unregistered / Unconfirmed
GUEST, unregistred user!
在DBGrid中进行修改未离开改变列之前如何得到改变内容?
 
我也正遇到这个问题! 可以通过query的beforescroll事件中获得!
但是你也要控制的住,因为许多情况都会响应该事件!
 
其实我到底也没有解决这个问题,因为当用户切换记录但不改变列时,OnColExit事件
是不响应的。要不你可以结合query或Table控件的OnChangerecord事件?这样你就可以
判断用户是否切换了记录了。总的来说,DBGrid控件没有这样的功能!!!!
你也可以去看看有没有强大的第三方控件,或者使用TListBox它也有columns属性。
我的一个朋友就用TListBox来代替DBGrid,做了好几个项目了。不过比较烦,
TListBox中的数据你可要自己一点一点写!
 
freesoaring谢谢你的提示,如果没有其他方法
我用BeforePost事件完成,能满足我的要求。

var
isxz: Boolean; // 是否执行选取

procedure TForm1.DBGrid2DblClick(Sender: TObject);
begin
if (Query3.State in [dsEdit,dsInsert]) then begin
isxz:=true;
Query3.Post;
end else begin
xqnr:=Query3.FieldByName('spbm').AsString;
Spxq(xqnr);
end;
end;

procedure TForm1.Query3BeforePost(DataSet: TDataSet);
begin
if isxz then begin
xqnr:=Query3.FieldByName('spbm').AsString;
Spxq(xqnr);
isxz:=false;
Abort;
end;
end;

 
这样也可以!
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
Query1.Active:=true;
for i:=1 to Query1.FieldCount-1 do begin
TNumericField(Query1.Fields).OnChange:=MyChange;
end;
end;

procedure TForm1.MyChange(Sender: TField);
var
xqnr: String;
begin
xqnr:=Sender.AsString;
showmessage(xqnr);
// Spxq(xqnr);
end;
 
后退
顶部