for i:=0 to DBGrid.SelectRows.Count do
begin
  DBGrid.Book := DBGrid.SelectRows.Items[i];
  Table.FieldValues['..'] := true;
end;
//未测试。

解决方案 »

  1.   

    没有必要用book
    因为你既然选定了记录,也就是用dbgrid.currentrows.selected判断是否被选中,然后再作处理就行了
      

  2.   

    Delphi自带例子:(算是最好的例子了:)
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i, j: Integer;
      s: string;
    begin
      if DBGrid1.SelectedRows.Count>0 then
        with DBGrid1.DataSource.DataSet do
          for i:=0 to DBGrid1.SelectedRows.Count-1 do //多行选择.
          begin
            GotoBook(pointer(DBGrid1.SelectedRows.Items[i]));
            for j := 0 to FieldCount-1 do
            begin          if (j>0) then s:=s+', ';
              s:=s+Fields[j].AsString;
            end;
            Listbox1.Items.Add(s);
            s:= '';
          end;
    end;
      

  3.   

    呵呵,是DELPHI的帮助文件中的例子
      

  4.   

    to cobi
    当然要用book,currentrowselected 只是判断当前一行是否被选中,是boolean。到底选中哪几条还得看.selectedrows.items。
      

  5.   

    怎么没人世间能给出满意的答复呀?
    首先我要说明的是,DBGrid里的数据是用SQL语句Query出来的。
    不能直接在query里面修改,只能是找到某种标记,然后再用SQL
    里的Update来一起修改,但当DBGrid里选中多行后,怎么知道哪些已选中,
    并且用Update来进行修改呢?
      

  6.   

    那就先取selectedrows的主键
    然后自己拼接成UPDATE语句
    建议你还是用UPDATESQL控件吧
      

  7.   

    恐怕你要一次性全部修改那些记录是比较难以实现的吧,因为你要保证这些记录中必须有相同的标记而且含该标记的记录都被选上才行。如果直接对query做操作就不同
      

  8.   

    建议加入一个“ISSP”字段默认为FALSE,然后在经理审批标记时时将其值变为TRUE
    然后再对那些记录进行修改不就方便多了吗!
      

  9.   

    当双击记录可以用CANVAS画一个“∨”,表示已审批,保存的时候将ISSP的值变为TRUE
      

  10.   

    Sorry,我把query的结果集改用Table->ApplyRange来取了,
    就是说可以直接修改结果集了,现在应该怎样实现我想要的功能呢?