1,在DBgrid中,怎么样判断记录移动到上一行或者下一行?怎么样控制某一行在编辑的时候不能移动到其他行?
    2.在DBgrid中我用    
     DBGrid.SelectedRows.Delete;
     AdoCtmQry.UpdateBatch();
     删除选择的多条记录!当我选择记录的时候,我用上面的语句怎么删除不了当前的记录呢?
     我用:AdoCtmQry.delete;
          AdoCtmQry.post;也不行?是那里没有控制好呢?谢谢指点.....
      

解决方案 »

  1.   

    1.编辑时设DBGrid.Enabled := false;编辑完成再设其为true;
    2.你试试行不:
      ...
      for i := 0 to DBGrid.SelectedRows.Count - 1 do
      begin
        AdoCtmQry.GotoBook(Pointer(DBGrid.SelectedRows[i]));
        AdoCtmQry.Delete;
      end;
      AdoCtmQry.UpdateBatch();
      

  2.   

    1,在BeforeScroll事件中,记录当前记录
    begin
      inherited;
      CBook:= CTable.GetBook;
    end;
    在 afterScroll事件中,记录当前记录
    begin
      inherited;
      CBook与当前记录比较
    end;
    2,AdoCtmQry.delete;应该就删除了。
      

  3.   

    1.编辑时设DBGrid.Enabled := false;编辑完成再设其为true;
     如果这样的话,我不是不能在DBGrid上修改数据?有没有办法提取DBgrid的行的索引值呢?
    AdoCtmQry.delete;应该就删除了
       还是删除不掉;哪怕post 后也删除不掉;只有我选择记录后才行!
      

  4.   

    问题2
    procedure TForm1.Button4Click(Sender: TObject);
    var i:Integer;
    begin  for i := 0 to DBGrid1.SelectedRows.Count - 1 do
      begin
        ADOQuery1.GotoBook(pointer(DBGrid1.SelectedRows[i]));
        ADOQuery1.Delete;
      end;
      dbgrid1.SelectedRows.Clear;
        //
    end;
      

  5.   

    问题1
    procedure TForm1.ADOQuery1BeforePost(DataSet: TDataSet);
    begin
      if true then
        abort;//不想post 时候使用,但是DBgrid1的多行选择时候生效的情况下不能阻止多行选择。
    end;
      

  6.   

    呵呵,我回答错了,那是我常用的方法,不在DBGrid中编辑;你试试这个:
    这里设ADOQuery1为DBGrid1.DataSource.DataSet
    procedure TForm1.DBGrid1StoreKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if ADOQuery1.State = dsEdit then
        if Key in [38, 40] then Key := 0;
    end;
      

  7.   

    我没说清楚,不好意思,浪费大家时间了;我的意思是:
       我用以下的语句实现了在DBgrid中 DBGrid.SelectedRows.Delete;AdoCtmQry.UpdateBatch();删除选择的多条记录!(必须在选择的情况下)  现在我只想删除DBGrid中当前的一条记录.我用AdoCtmQry.delete,为什么不行? 我设置了Dbgrid的Selectrows属性;我删除的记录是在没有选择的情况下,想删除当前指针默认的记录;
        简单点:就是怎么样判断DBgrid中没有记录被选中!
        
              
      

  8.   

    to:  weizi2000(秋风啊-秋的叹息)
        我的修改不确定.我可以对DBgrid中的多条记录修改.因为我在keydown 和colexit中写了修改代码;当我离开的clounm时候自动修改值;这个时候当我换为其他行的时候,数据修改出现错误,(该修改的本行数据没修改,而是把当前焦点所在行的数据)
      

  9.   

    在OnAfterInsert  OnAfterEdit事件中:
     DataSetName.Tag := 1;在保存按钮事件中写:
     Try
       DataSetName.Tag := 0;  //不可少,否则永远都提交不了数据
       DataSetName.Post;
     Except
       DataSetName.Tag := 1
     End;在DataSet.OnBeforePost事件中写:
      If DataSetName.tag=1 then Abort;
    以上代码借用了DataSet.Tag作业互斥条件,因为移动记录的时候,如果数据集在编辑状态下会自动提交,而自动提交心然会调用BeforePost事件。
      

  10.   

    简单点:就是怎么样判断DBgrid中没有记录被选中!DBGrid1.SelectedRows.Count
      

  11.   

    if DBGrid1.SelectedRows.Count>0 then //有记录选中
      

  12.   

    TO:  kaguo(▲) Guozhi(★★★★★) 
        你的方法解决了我的删除问题;谢谢你;  第一个问题我只要知道怎么捕捉到Dbgrid在不同的行就可以了;
      比如:我现在在修改第一行的数据,
           接着我又跳到第二行,我只想保存第一行,第二行不保存,怎么办?
       Dbgrid中的每一行有没有唯一标识?
      

  13.   

    因为我在dbgrid的keydown中提取cell中的值,当cell离开时判断所改的值在不在要求的范围内,如果不在我要求的范围内,就用提取的值还原;在这个过程中,当我离开了所在行的话,此时还原的数据就会覆盖当前所在行对应的数据;  这个怎么控制?