GridViewModel.Controller.SelectedRows[i] 是根据选中记录的索引来返回行的,如果你是按字段 AAA排序,那每修改一条记录,排序就会发生变化,因此 GridViewModel.Controller.SelectedRows[i] 返回的就不是你需要的结果了; 因此在修改过程中,锁定界面更新:
var
  i:Integer;
begin
  cxGrid1DBTableView1.BeginUpdate();
  for i := 0 to cxGrid1DBTableView1.Controller.SelectedRowCount-1 do
  begin
    cxGrid1DBTableView1.Controller.FocusedRow := cxGrid1DBTableView1.Controller.SelectedRows[i];
    ClientDataSet1.Edit;
    ClientDataSet1.FieldByName('Name').AsString := 'lilihao';
    ClientDataSet1.Post;
  end;
  cxGrid1DBTableView1.EndUpdate;
http://hi.baidu.com/lemtech