with dbgrid1.DataSource.DataSet do
  for i:=0 to dbgrid1.SelectedRows.Count-1 do
  begin
    gotobook(pointer(dbgrid1.SelectedRows.items[i]));
    dbgrid1.DataSource.DataSet.Delete;
  end;
end;
这是在点击删除按钮的代码,当用鼠标选中某条或某几条来删除并没问题,问题是当运行删除后,dbgrid焦点会自动移上或移下,这时我如果直接再按一下删除按钮就出错了

解决方案 »

  1.   

    在删除之后加一条语句dbgrid1.Rows := RowsCount-1;使当前行自动移到最后一行(有数据的一行),这样就不会落在空行上。
      

  2.   

    用数据集实现
         DATASET.PRIOR;
      

  3.   

    抱歉,的确没有ROWS这个属性,我是从STRINGGRID借用来的,两个应该都差不多吧?
      

  4.   

    QRY_CARD.Locate('CARD_ID',(EDT_CARD_ID.Text),[loCaseInsensitive]);
    這是我的做法,用dbgrid的Locate方法就可以了;
    QRY_CARD是dbgrid對應的數據集;
    'CARD_ID',數據集中的一個欄位;
    (EDT_CARD_ID.Text)是'CARD_ID'等於的值;
    上面語句的含義就是讓dbgrid的當前指定的記錄為:CARD_ID=EDT_CARD_ID.Text的那條記錄;
    Locate的用法在DELPHI的幫助中有詳細介紹!!
      

  5.   

    问题解决了, 只要这样就行
    dbgrid2.SelectedRows.Clear;
    虽然还是有焦点存在,让用户误认是已经选中的,但总比出错好