一弹出菜单,功能是点击后修改被选中的行的某格单元格的值,并保存到数据库中,程序如下所示:
procedure TFrmCh.N1Click(Sender: TObject);
var
  mystr,sqlstr:string;
  i,j:integer;
begin      //mystr:=viewcj.DataController.GetSelectedBook(0);
      //mystr:=viewcj.Controller.SelectCells(3,4);
     //showmessage(inttostr(viewcj.DataController.getselectedcount));   //此段程序当没有点击表头进行排序或分组时选择的记录是正确的,但是如果点击了表头
   //  排序后再执行就不对了,需要尝试用其他方法来解决。
     for i:=0 to viewcj.DataController.getselectedcount-1 do
     begin
       j:=viewcj.DataController.getselectedrowindex(i);       mystr:= viewcj.DataController.Values[j,2];
      // showmessage( inttostr(viewcj.DataController.RecNo));
       sqlstr:='update cjrecord set flg=0 where empnum='+''''+mystr+'''';
       with dbmodule.QryQosChTemp do
       begin
         sql.clear;
         sql.Add(sqlstr);
         execsql;
         viewcj.DataController.Values[j,7]:=0;   //不用刷新数据集,修改了数据后再修改一下grid的显示结果就可以了
       end;
      end;   
  end;
在执行时,如果不点表头对数据排序显示或拖拽分组的话,程序可以按表格中选择的行修改数据,但是如果进行了排序操作或分组操作,再执行弹出菜单命令时程序并不是修改的选中的行的数据,显示其viewcj.DataController.getselectedrowindex发现其值并不是选中行的index,好像是sql的查询结果集的index,不知如何修改。