1.在相关数据集控件的beforepost事件里面写:dataset.cancel用了以后,会报错'CAN NOT INSERT NULL INTO COLUMN KEY','INSERT FAIL'2.要怎么样才能让光标和滚轮一起动呢? 我的意思是在鼠标滚轮滚动时,要怎么样才能让左边的光标(DBGRID左边那个小三角)指到相应的位置
我想这样最符合你的要求: 1. procedure TForm1.FormCreate(Sender: TObject); begin Application.OnMessage :=ApplicationEvents1Message; end;2. procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); begin if (DBGrid1.Focused) And (Msg.message = WM_MOUSEWHEEL) then begin if Msg.wParam > 0 then SendMessage(DBGrid1.Handle, WM_KEYDOWN, VK_UP, 0) else SendMessage(DBGrid1.Handle, WM_KEYDOWN, VK_DOWN, 0); Handled := True; end; end;
2.不明白
我的意思是在鼠标滚轮滚动时,要怎么样才能让左边的光标(DBGRID左边那个小三角)指到相应的位置
第二个问题我还是比较想用代码来做.但我会去看看EHlib控件的DBGridEh的.
2.鼠标移动的事件中,发一个滚动条的消息。
1.焦点变了只会Cancel?那为何还要编辑呢,ReadOnly不就可以了。
用户是上帝(这个理由够吗?)
主要是表项太多因此在EDIT中输的话,神说不好用,所以在DBGRID中来进行增,删,改.
神又说,输错了要有回滚操做,所以我就做回滚操做,但如果焦点变就POST的话,就无法将事务的点做保存,所以只能是1.修改或新增记录是焦点不变
或2.焦点变了后只会CANCEL而不是POST 2.鼠标移动的事件中,发一个滚动条的消息
能给出代码吗?
2.少等,我测试
cachedupdates设置为True,最后提交用ApplyUpdates来真正写入数据。说出来不怕你们笑,我找不到cachedupdates和ApplyUpdates,能不能说具体点.
DELPHI6.0中用到了,TADOQUERY,TDBGRID,TDataSource
SQL SERVER2000用到了ROLLBACK,事务.你所指的是不是这些?
AdoQuery1.LockType:=LTBATCHOPTIMISTIC //进入缓存更新模式保存:
AdoQuery1.UpdateBatch(arAll)取消:
AdoQuery1.CancelBatch(arAll);
1.光标就是跟着鼠标一起动的
但不包括滚轮,我想了下做好的办法是让滚轮没有作用,让上帝们用手去点.2.
如果是Ado:使用如下方法。
AdoQuery1.LockType:=LTBATCHOPTIMISTIC //进入缓存更新模式 保存:
AdoQuery1.UpdateBatch(arAll) 取消:
AdoQuery1.CancelBatch(arAll); 我想说的是,在进入缓存更新模式下,AdoQuery1.post和AdoQuery1.UpdateBatch(arAll)有什么差别.
(我现在是在改程序,而不是编程序.)改了后对已存在的AdoQuery1.post会有影响吗?
http://www.yesky.com/SoftChannel/72342371928440832/20030619/1709082.shtml
换一个两键的MOUSE不就可以啦。:) 这话能对上帝说吗?to fbysss(独孤求败)
我先试试,如果不行的话怎么告诉你呢?
重新写一个控件,改造DBGRID控件 您太高估我了,谢谢.
1.
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage :=ApplicationEvents1Message;
end;2.
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if (DBGrid1.Focused) And (Msg.message = WM_MOUSEWHEEL) then
begin
if Msg.wParam > 0 then
SendMessage(DBGrid1.Handle, WM_KEYDOWN, VK_UP, 0)
else
SendMessage(DBGrid1.Handle, WM_KEYDOWN, VK_DOWN, 0);
Handled := True;
end;
end;