1.在一个DBGRID中在修改或新增记录是只要焦点一变就自动POST了,
要怎么办才能在修改或新增记录是焦点不变或焦点变了后只会CANCEL而不是POST呢?
2.要怎么样才能让光标和滚轮一起动呢?在线等,分不够再加

解决方案 »

  1.   

    1.在相关数据集控件的beforepost事件里面写:dataset.cancel
    2.不明白
      

  2.   

    1.在相关数据集控件的beforepost事件里面写:dataset.cancel用了以后,会报错'CAN NOT INSERT NULL INTO COLUMN KEY','INSERT FAIL'2.要怎么样才能让光标和滚轮一起动呢?
      我的意思是在鼠标滚轮滚动时,要怎么样才能让左边的光标(DBGRID左边那个小三角)指到相应的位置
      

  3.   

    建议你用EHlib控件的DBGridEh,不用任何代码就能够很好的满足你第二个问题。
      

  4.   

    那还有第一个问题呢?
             第二个问题我还是比较想用代码来做.但我会去看看EHlib控件的DBGridEh的.
      

  5.   

    1.焦点变了只会Cancel?那为何还要编辑呢,ReadOnly不就可以了。
    2.鼠标移动的事件中,发一个滚动条的消息。
      

  6.   

    to  fbysss(独孤求败) 
        1.焦点变了只会Cancel?那为何还要编辑呢,ReadOnly不就可以了。
        用户是上帝(这个理由够吗?)
        主要是表项太多因此在EDIT中输的话,神说不好用,所以在DBGRID中来进行增,删,改.
        神又说,输错了要有回滚操做,所以我就做回滚操做,但如果焦点变就POST的话,就无法将事务的点做保存,所以只能是1.修改或新增记录是焦点不变
                     或2.焦点变了后只会CANCEL而不是POST    2.鼠标移动的事件中,发一个滚动条的消息
        能给出代码吗?
      

  7.   

    1.你这个需求,可以把cachedupdates设置为True,最后提交用ApplyUpdates来真正写入数据。
    2.少等,我测试
      

  8.   

    cachedupdates这方法好,他不会写入硬盘,除非你用flush才存进去
      

  9.   

    to fbysss(独孤求败), whbo(王红波) 
       cachedupdates设置为True,最后提交用ApplyUpdates来真正写入数据。说出来不怕你们笑,我找不到cachedupdates和ApplyUpdates,能不能说具体点.
      

  10.   

    DEHPHI6.0,SQL SERVER2000,WINXP.
    DELPHI6.0中用到了,TADOQUERY,TDBGRID,TDataSource
    SQL SERVER2000用到了ROLLBACK,事务.你所指的是不是这些?
      

  11.   

    如果是Ado:使用如下方法。
    AdoQuery1.LockType:=LTBATCHOPTIMISTIC  //进入缓存更新模式保存:
    AdoQuery1.UpdateBatch(arAll)取消:
    AdoQuery1.CancelBatch(arAll);
      

  12.   

    to  fbysss(独孤求败) 
       1.光标就是跟着鼠标一起动的
       但不包括滚轮,我想了下做好的办法是让滚轮没有作用,让上帝们用手去点.2.
      如果是Ado:使用如下方法。
      AdoQuery1.LockType:=LTBATCHOPTIMISTIC  //进入缓存更新模式  保存:
      AdoQuery1.UpdateBatch(arAll)  取消:
      AdoQuery1.CancelBatch(arAll); 我想说的是,在进入缓存更新模式下,AdoQuery1.post和AdoQuery1.UpdateBatch(arAll)有什么差别.
    (我现在是在改程序,而不是编程序.)改了后对已存在的AdoQuery1.post会有影响吗?
      

  13.   

    我建议,你自己重新写一个控件,参考:
    http://www.yesky.com/SoftChannel/72342371928440832/20030619/1709082.shtml
      

  14.   

    还有怎么才能让滚轮没有作用(我是学VC的DELPHI刚起步,请多关照)
      

  15.   

    你设置好了以后,AdoQuery1.post这句就可以注释掉了。用UpdateBatch替代。后者是批量更新,即并不是修改一条就写一条。
      

  16.   

    换一个两键的MOUSE不就可以啦。:)
      

  17.   

    不起作用,你可以改造DBGRID控件,重载MouseWheelHandler方法,啥也不做就OK了。
      

  18.   

    to coeltdit(睫毛上的冰)
       换一个两键的MOUSE不就可以啦。:)   这话能对上帝说吗?to fbysss(独孤求败)
       我先试试,如果不行的话怎么告诉你呢?
      

  19.   

    我下午不上班,给我Email吧。[email protected]
      

  20.   

    to fbysss(独孤求败)
       重新写一个控件,改造DBGRID控件   您太高估我了,谢谢.
      

  21.   

    我想这样最符合你的要求:
    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;