cxGrid中如何把鼠标锁定在一行上,不能让它上下移动? 找商品进销存管理系统
记账软件版1楼: cxGrid中如何把鼠标锁定在一行上,不能让它上下移动?
我想实现的是,在浏览状态下用户可以上下移动记录,但执行"修改"后就把鼠标锁定在当前修改的记录上,直接执行"保存"后才解除锁定.
在TcxGridDBTableView的OnCanFocusRecord事件中写代码就行了.如下:
procedure TFrmBillType.tvBillTypesCanFocusRecord(
Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
var AAllow: Boolean);
begin
inherited;
if bUInEdit then
AAllow := false;
end;
我想实现的是,在浏览状态下用户可以上下移动记录,但执行"修改"后就把鼠标锁定在当前修改的记录上,直接执行"保存"后才解除锁定.
2楼: ADOQuery1.DisableControls; // 鎖定
...................
ADOQuery1.EnableControls; // 解鎖 如商品进销存管理系统
3楼: 不是这个意思,是要控制cxgrid在编辑状态下不能上下移动记录直到退出编辑状态
4楼: 自己寫代碼啊
在boforepost事件裡寫
if ADOQuery1.State in [dsedit] then
begin
//這個說明在修改。自己寫代碼
end
else
~~~~
大概就是這樣
5楼: 假设cxGrid对应的数据集是ADOQuery1,那么在ADOQuery1.BeforeScroll事件中添加代码可以实现控制,如:
if FormInEdit then
Abort;
其中FormInEdit是cxGrid所在窗体的私有变量,当“修改”数据时,设置为True,“保存”时,先设置此变量为False,然后提交。“取消”同理。
6楼: 非常感谢amao123,我试试看
记账软件版7楼: 我试了,amao123的方法在某些时候是可以的,不过会引发cxgrid的recordindex out of range的错误.
8楼: 在amao123的提示下,找到了解决方法了.
在TcxGridDBTableView的OnCanFocusRecord事件中写代码就行了.如下:
procedure TFrmBillType.tvBillTypesCanFocusRecord(
Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
var AAllow: Boolean);
begin
inherited;
if bUInEdit then
AAllow := false;
end;
9楼: 结贴
10楼: ~~~
11楼: 多人接受答案了。