我想多选cxGrid的记录:我把OptionsSelection的MultiSelect设置为True后,多选的记录我怎么知道我是选择了那几条啊,
例:我在DbGrid中可以这样的知道我所选择的记录:
for Int_i := 0 to DBGrid1.SelectedRows.Count - 1 do
begin
     query1.GotoBook(Tbook(DBGrid1.SelectedRows.Items[Int_i]));
     Pub_RowValue.Add(query1.fieldbyname(Pub_ResultColumn).AsString);
end;

解决方案 »

  1.   

    看你安装cx的例子吧,在DEMO下
      

  2.   

    procedure Tform1.DataMov(count: Integer);
    var
       i, j, k: Integer;
       sendState, sendMainid,scount, GoodsName, goodsType, phone, ask, getPosition, GetAddr, GEt, pay, Minuteid: string;
    begin   MinuteId := Cdsmain.fieldbyname('sendMinuteID').asstring;
       sendSTate := Cdsmain.fieldbyname('sendState').asstring;
       for k := 1 to tsgrid1.Rows do
       begin
          if (trim(tsgrid1.Cell[tsgrid1.Col['sendMinuteId'].id, k]) = minuteID) or (SendState = '02') then
          begin
             msg('此记录已添加');
             exit;
          end;
       end;                    //////////////////////取值
       j := tsgrid1.Rows + 1;
       tsgrid1.rows := j;
       sendMainid := Cdsmain.fieldbyname('sendMainID').asstring;
       GoodsName := Cdsmain.fieldbyname('clientname').asstring;
       GoodsType := Cdsmain.fieldbyname('GoodsType').asstring;
       Phone := Cdsmain.fieldbyname('clientFixtel').asstring;
       Ask := Cdsmain.fieldbyname('clientAsk').asstring;
       GetPosition := Cdsmain.fieldbyname('GetPosition').asstring;
       GEtaddr := Cdsmain.fieldbyname('GetAddr').asstring;
       Get := Cdsmain.fieldbyname('ShouldGet').asstring;
       pay := Cdsmain.fieldbyname('ShouldPay').asstring;
       MInuteid := Cdsmain.fieldbyname('sendMinuteID').asstring;
       scount := Cdsmain.fieldbyname('goodscount').asstring;
       cdsmain.Delete;
       for i := j to count do //////////往TsGrid里面赋值
       begin
      ////////
     ////////////
          tsgrid1.Cell[tsgrid1.Col['sendMainId'].id, i] := SendMainid;
          tsgrid1.Cell[tsgrid1.Col['clientname'].id, i] := GoodsName;
          tsgrid1.Cell[tsgrid1.Col['clientFixtel'].id, i] := Phone;
          tsgrid1.Cell[tsgrid1.Col['clientask'].id, i] := Ask;
          tsgrid1.Cell[tsgrid1.Col['GetPosition'].id, i] := Getposition;
          tsgrid1.Cell[tsgrid1.Col['GetAddr'].id, i] := GetAddr;
          tsgrid1.Cell[tsgrid1.Col['ShouldGet'].id, i] := Get;
          tsgrid1.Cell[tsgrid1.Col['ShouldPay'].id, i] := pay;
          tsgrid1.Cell[tsgrid1.Col['SendMinuteId'].id, i] := Minuteid;
          tsgrid1.Cell[tsgrid1.Col['GoodsCount'].id, i] := Scount;
       end;
    end;我没有用goto,嘿嘿,自己些吧
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i, n: integer;
      a: TcxCustomGridRecord;
    begin
      n := cxGrid1DBTableView1.DataController.Controller.SelectedRecordCount;
      if n > 0 then
      begin
        ADOQuery1.Close;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add('if OBJECT_ID(''tempdb..#Test'') is not null drop table #Test ' +
                          'Create table #Test (name char(20) not null,Capital char(20) not null)');
        ADOQuery1.ExecSQL;
        for i := 1 to n do
        begin
          a := cxGrid1DBTableView1.DataController.Controller.SelectedRecords[i - 1];
          if a.IsData then
          begin
            ADOQuery1.Close;
            ADOQuery1.SQL.Clear;
            ADOQuery1.SQL.Add('insert #Test values(:Name, :Capital)');
            ADOQuery1.Parameters.ParamByName('Name').Value := a.Values[cxGrid1DBTableView1Name.Index];
            ADOQuery1.Parameters.ParamByName('Capital').Value := a.Values[cxGrid1DBTableView1Capital.Index];
            ADOQuery1.ExecSQL;
          end;
        end;
        ADOQuery1.Close;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add('select * from #Test');
        ADOQuery1.Open;
      end;
    end;
      

  4.   

    //或者这样,下面的ADOTable1为cxGrid的Dataset,把选中数据提取到ADOQuery1中var
      i, n: integer;
      a: TcxCustomGridRecord;
    begin
      n := cxGrid1DBTableView1.DataController.GetSelectedCount;
      if n > 0 then
      begin
        ADOQuery1.Close;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add('if OBJECT_ID(''tempdb..#Test'') is not null drop table #Test ' +
                          'Create table #Test (name char(20) not null,Capital char(20) not null)');
        ADOQuery1.ExecSQL;
        for i := 0 to n - 1 do
        begin
          a := cxGrid1DBTableView1.DataController.Controller.SelectedRecords[i];
          if a is TcxGridDataRow then
          begin
            ADOQuery1.Close;
            ADOQuery1.SQL.Clear;
            ADOQuery1.SQL.Add('insert #Test values(:Name, :Capital)');
            ADOTable1.Book := cxGrid1DBTableView1.DataController.GetSelectedBook(i);
            ADOQuery1.Parameters.ParamByName('Name').Value := ADOTable1.FieldByName('Name').AsString;
            ADOQuery1.Parameters.ParamByName('Capital').Value := ADOTable1.FieldByName('Capital').AsString;
            ADOQuery1.ExecSQL;
          end;
        end;
        ADOQuery1.Close;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add('select * from #Test');
        ADOQuery1.Open;
      end;
    end;
      

  5.   


    for Int_i := 0 to Tsgrid1.SelectedRows.Count- 1 do
    begin
         query1.GotoBook(Tbook(tsgrid1.Cell[tsgrid1.Col['clientFixtel'].id, i]));
         Pub_RowValue.Add(query1.fieldbyname(Pub_ResultColumn).AsString);
    end;
      

  6.   

    我在DbGrid中可以这样的知道我所选择的记录:
    for Int_i := 0 to DBGrid1.SelectedRows.Count - 1 do
    begin
         query1.GotoBook(Tbook(DBGrid1.SelectedRows.Items[Int_i]));
    end;
    这是在DbGrid可以用以上方法移动我选择的记录上,在cxGrid上怎么才能达到一样的效果啊
      

  7.   

    for i := 0 to n - 1 do
        begin
          a := cxGrid1DBTableView1.DataController.Controller.SelectedRecords[i];
          if a is TcxGridDataRow then
          begin
            ...
            ADOTable1.Book := cxGrid1DBTableView1.DataController.GetSelectedBook(i);
            //这不就是把ADOTable1定位到选中的第i条记录吗?
            //use ADOTable1.FieldByName('***').AsString;
          end;
        end;
      

  8.   

    我也想问一个cxGrid的问题,如何在此控件的第一列,显示一个序列号,递增的1,2,3,4,5……