dxdbgrid1.SelectedField.AsString:=clipboard.AsText;

解决方案 »

  1.   

    不,您误会我的意思了,我的意思是有一个粘贴操作,但是并不将字段的值改变为剪贴板的内容,比如我的剪贴板放了一个字符‘=’,然后我在dxDBGrid中编辑数据,当我按某个组合键的时候,这个‘=’就被粘贴到我光标的当前位置来了,如何操作?
      

  2.   

    复制、粘贴都是自己控制
    用TStringList足够了!
    参考其他DataSetToText、TextToDataSet
      

  3.   

    用StringList怎么实现这种功能?
    ..up
      

  4.   

    //辛苦半天才出来的东西就这样给你了!
    //不处理多行文本,图片等情况uses
      Clipbrd;function StrLeft(const mStr: string; mDelimiter: string): string;
    begin
      Result := Copy(mStr, 1, Pos(mDelimiter, mStr) - 1);
    end; { StrLeft }function ListCount(mList: string; mDelimiter: string = ','): Integer;
    var
      I, L: Integer;
    begin
      Result := 0;
      if mList = '' then Exit;
      L := Length(mList);
      I := Pos(mDelimiter, mList);
      while I > 0 do begin
        mList := Copy(mList, I + Length(mDelimiter), L);
        I := Pos(mDelimiter, mList);
        Inc(Result);
      end;
      Inc(Result);
    end; { ListCount }function ListValue(mList: string; mIndex: Integer; mDelimiter: string = ','): string;
    var
      I, L, K: Integer;
    begin
      L := Length(mList);
      I := Pos(mDelimiter, mList);
      K := 0;
      Result := '';
      while (I > 0) and (K <> mIndex) do begin
        mList := Copy(mList, I + Length(mDelimiter), L);
        I := Pos(mDelimiter, mList);
        Inc(K);
      end;
      if K = mIndex then Result := StrLeft(mList + mDelimiter, mDelimiter);
    end; { ListValue }function DataSetToText(mDataSet: TDataSet; mFieldNames: string;
      mDelimiter: string = ';'): string;
    var
      vBook: string;
      S: string;
      I: Integer;
    begin
      Result := '';
      mDataSet.DisableControls;
      vBook := mDataSet.Book;
      mDataSet.First;
      while not mDataSet.Eof do begin
        S := '';
        for I := 0 to mDataSet.FieldList.Count - 1 do
          S := S + mDelimiter + mDataSet.FieldList[I].DisplayText;
        Delete(S, 1, 1);
        Result := Result + S + #13#10;
        mDataSet.Next;
      end;
      mDataSet.Book := vBook;
      mDataSet.EnableControls;
    end;function DBGridFields(mDBGrid: TDBGrid; mDelimiter: string = ';'): string;
    var
      I: Integer;
    begin
      Result := '';
      for I := 0 to mDBGrid.Columns.Count - 1 do
        Result := Result + mDelimiter + mDBGrid.Columns[I].FieldName;
      Delete(Result, 1, Length(mDelimiter));
    end; { DBGridFields }function GetDBGridValues(mDBGrid: TDBGrid): string;
    begin
      Result := DBGridFields(mDBGrid, #9) + #13#10 +
        DataSetToText(mDBGrid.DataSource.DataSet, DBGridFields(mDBGrid), #9);
    end; { GetDBGridValues }procedure SetDBGridValues(mDBGrid: TDBGrid; mText: string);
    var
      I, J, C: Integer;
      vFieldNames: string;
      vSelectedIndex: Integer;
    begin
      if mText = '' then Exit;
      vSelectedIndex := mDBGrid.SelectedIndex;
      with mDBGrid.DataSource, TStringList.Create do try
        Text := mText;
        vFieldNames := Strings[0];
        C := ListCount(vFieldNames, #9);
        for I := 1 to Count - 1 do begin
          DataSet.Append;
          for J := 0 to C - 1 do
            if DataSet.FieldList.IndexOf(ListValue(vFieldNames, J, #9)) >= 0 then begin
              mDBGrid.SelectedField := DataSet.FieldByName(ListValue(vFieldNames, J, #9));
              if mDBGrid.Columns[mDBGrid.SelectedIndex].FieldName = ListValue(vFieldNames, J, #9) then
                if not mDBGrid.Columns[mDBGrid.SelectedIndex].ReadOnly then
                  DataSet[ListValue(vFieldNames, J, #9)] := ListValue(Strings[I], J, #9);
            end;
          DataSet.Post;
        end;
      finally
        Free;
      end;
      mDBGrid.SelectedIndex := vSelectedIndex;
    end; { SetDBGridValues }procedure TForm1.Button1Click(Sender: TObject);
    begin
      Clipboard.AsText := GetDBGridValues(DBGrid1);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      //清空数据
      SetDBGridValues(DBGrid1, Clipboard.AsText);
    end;
      

  5.   

    要支持dxDBGrid还要自己改改
    我一般不使用第三方控件
      

  6.   

    to zswang(伴水)(需要充充电):
    你的代码并不符合我的要求,不过感谢你的参与,我自己已经解决这个问题了。给分。