1.选中cxgrid的某几行记录,如何粘贴到cxgrid?2.能否将excel的记录粘贴到cxgrid里?

解决方案 »

  1.   

    1.cxgrid中没有现成的方法可以拷贝、粘贴。如果要做的话,可以创建一个动态数组,把要拷贝的数据写到数组中,粘贴时,逐行写入
    拷贝代码如下:Private中设置selRows:Variant;
    procedure TForm1.btn1Click(Sender: TObject);
    var
      i,j,SelCount,ColCount: Integer;begin
      SelCount:=grdView1.Controller.SelectedRowCount;
      ColCount:=grdView1.DataController.ItemCount;
      selRows:=VarArrayCreate([ColCount-1,SelCount-1],varVariant);
      for i :=0  to SelCount-1 do
      begin
        for j := 0 to ColCount-1 do
        begin
          selRows[j,i]:=grdView1.Controller.SelectedRows[i].Values[j];
        end;
      end;
    end;粘贴时反方向写过去,写数据集还是直接写到控件中,看楼主需要。2.Excel文件的粘贴原理一样,如果是通过Office打开的话,要解析剪贴板很麻烦。变通起来倒也不难,使用Dev的SpreadSheet打开文件,别的操作等同于cxgrid,所不同的是取每个Cell的值,例子中都有详细的描述,好象需要GetCellObject之类的函数,楼主可以到Hlp文件中搜一下,或者找个例子。
      

  2.   

    cxgrid 不自带这么个性的功能,不过自己写也不难 ,用到keydown事件,判断按下ctrl+v  读取剪贴板 就行了,思路就是这,关键在读取剪贴板,那个现成的代码也多,搜一搜呗
      

  3.   

    1、uses clipbrd;
    2、复制
    procedure TForm1.cxButton1Click(Sender: TObject);
    var
    p1,p2:integer;
    p3:string;
    begin
    p1:=cxGrid5DBTableView1.Controller.FocusedRowIndex;
    p2:=cxGrid5DBTableView1.Controller.FocusedColumnIndex;
    p3:=cxGrid5DBTableView1.DataController.Values[p1,p2];
    showmessage(inttostr(p1)+','+inttostr(p2)+','+p3);
    clipboard.AsText:=p3;
    3.粘贴
    procedure TForm1.cxButton1Click(Sender: TObject);
    begin
    keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);
    keybd_event(ord('C'), MapVirtualKey(ord('C'), 0), 0, 0);
    keybd_event(ord('C'), MapVirtualKey(ord('C'), 0), KEYEVENTF_KEYUP, 0);
    keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP,0); 
    end;
      

  4.   

    ???
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  5.   

    看不懂啊
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  6.   


    这个不是 Ctrl+C 吗
      

  7.   

    Ctrl+C  也是触发一个事件来处理! 意思差不多
      

  8.   


    cxgrid自带这个功能?能说说如何使用么?
      

  9.   

    在cxgrid上按Ctrl+C可将多条记录复制到剪贴板,这时到excel上按Ctrl+V可粘贴到excel,并且是带表头的。如何在将剪贴板上的记录粘贴到cxgrid上?
      

  10.   

    在网上找到这个代码,不过编译不通过//1:哈哈!我写过一个现成的函数,直接调用就可以了!
    procedure CopySelectRow(TheGrid: TDBGrid);
    var
    i : integer;
    j : integer;
    Rtf : TRichEdit;
    sline : string;
     : integer;
    begin
     := TheGrid.DataSource.DataSet.RecNo ;
    Rtf := TRichEdit.Create(Application);
    Rtf.visible := false;
    Rtf.parent := TheGrid.Parent ;
    Rtf.clear;
    sline:='';
    try
    with TheGrid.DataSource.DataSet do
    begin
    for i:=0 to FieldCount-1 do
    if not SpecFieldName(Fields[i].FieldName) then
    sline := sline fields[i].Displaylabel #9;
    Rtf.Lines.Add(sline);
    for i:=0 to (TheGrid.SelectedRows.Count -1) do
    begin
    GotoBook(pointer(TheGrid.SelectedRows[i]));
    sline:='';
    for j:=0 to FieldCount-1 do
    if not SpecFieldName(Fields[j].FieldName) then
    sline:=sline Fields[j].asstring #9;
    Rtf.lines.Add(sline);
    end;
    end;
    except
    Abort;
    end;
    Rtf.SelectAll;
    Rtf.CopyToClipboard;
    Rtf.Free;
    Rtf:= nil;
    TheGrid.DataSource.DataSet.RecNo:= ;
    end;
    //以上代码是复制到剪贴版;下面调用这个函数并导出到EXCEL的代码:
    CopySelectRow(yourGrid);
    try
    ExcelApp := CreateOleObject('Excel.Application');
    except
    showmessage('出错');
    end;
    ExcelApp.WorkBooks.Add;
    ExcelApp.WorkSheets[1].Activate;
    ExcelApp.ActiveSheet.Paste;
    ExcelApp.visible:= True;
    //2:{
    功能描述:把DBGrid输出到Excel表格(支持多Sheet)
    调用格式:CopyDbDataToExcel([DBGrid1, DBGrid2]);
    }
    procedure CopyDbDataToExcel(Args: array of const);
    var
    iCount, jCount: Integer;
    XLApp: Variant;
    Sheet: Variant;
    I: Integer;
    begin
    Screen.Cursor := crHourGlass;
    if not VarIsEmpty(XLApp) then
    begin
    XLApp.DisplayAlerts := False;
    XLApp.Quit;
    VarClear(XLApp);
    end;
    try
    XLApp := CreateOleObject('Excel.Application');
    except
    Screen.Cursor := crDefault;
    Exit;
    end;
    XLApp.WorkBooks.Add;
    XLApp.SheetsInNewWorkbook := High(Args) 1;
    for I := Low(Args) to High(Args) do
    begin
    XLApp.WorkBooks[1].WorkSheets[I 1].Name :=
    TDBGrid(Args[I].VObject).Name;
    Sheet :=
    XLApp.Workbooks[1].WorkSheets[TDBGrid(Args[I].VObject).Name];if not TDBGrid(Args[I].VObject).DataSource.DataSet.Active then
    begin
    Screen.Cursor := crDefault;
    Exit;
    end;
    TDBGrid(Args[I].VObject).DataSource.DataSet.first;
    for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 do
    Sheet.Cells[1, iCount 1] :=TDBGrid(Args[I].VObject).Columns.Items[iCount].Title.Caption;jCount := 1;
    while not TDBGrid(Args[I].VObject).DataSource.DataSet.Eof do
    begin
    for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1
    do
    Sheet.Cells[jCount 1, iCount 1] :=TDBGrid(Args[I].VObject).Columns.Items[iCount].Field.AsString;Inc(jCount);
    TDBGrid(Args[I].VObject).DataSource.DataSet.Next;
    end;
    end;
    XlApp.Visible := True;
    Screen.Cursor := crDefault;
    end;这个SpecFieldName应该是自定义函数吧?那位有心的朋友解释一下!