在通常情況下使用DBGRIDEH導出的到CSV中的數據是這個樣子的
"a","b","c"
可能我們并不希望它這樣顯示,有可能希望它顯示成種狀態
a,b,c
如果想這樣,我們可以修改DBGRIDEH里面的DBGridEhImpExp.pas文件
具體修改如下:增加一個自己的導出到CSV的類
 { TMyDBGridEhExportAsCVS }
  TMyDBGridEhExportAsCVS = class(TDBGridEhExportAsText)
  PRivate
    FSeparator: Char;
  protected
    procedure CheckFirstCell; override;
    procedure WriteTitle(ColumnsList: TColumnsEhList); override;
    procedure WriteDataCell(Column: TColumnEh; FColCellParamsEh: TColCellParamsEh); override;
    procedure WriteFooterCell(DataCol, Row: Integer; Column: TColumnEh; AFont: TFont;
      Background: TColor; Alignment: TAlignment; Text: String); override;
  public
    constructor Create; override;
    property Separator: Char read FSeparator write FSeparator;
  end;
{ TMyDBGridEhExportAsCVS }
procedure TMyDBGridEhExportAsCVS.CheckFirstCell;
var s: String;
begin
  if FirstCell = False then
  begin
    s := Separator;
    StreamWriteString(Stream, s);
//    Stream.Write(PChar(s)^, Length(s))
  end else
    FirstCell := False;
end;
constructor TMyDBGridEhExportAsCVS.Create;
begin
  Separator := ',';
  inherited Create;
end;
procedure TMyDBGridEhExportAsCVS.WriteDataCell(Column: TColumnEh; FColCellParamsEh: TColCellParamsEh);
var s: String;
begin
  CheckFirstCell;
  s := FColCellParamsEh.Text;
  StreamWriteString(Stream, s);
//  Stream.Write(PChar(s)^, Length(s));
end;
procedure TMyDBGridEhExportAsCVS.WriteFooterCell(DataCol, Row: Integer;
  Column: TColumnEh; AFont: TFont; Background: TColor;
  Alignment: TAlignment; Text: String);
var s: String;
begin
  CheckFirstCell;
  s := Text;
  StreamWriteString(Stream, s);
//  Stream.Write(PChar(s)^, Length(s));
end;
procedure TMyDBGridEhExportAsCVS.WriteTitle(ColumnsList: TColumnsEhList);
var i: Integer;
  s: String;
begin
  CheckFirstRec;
  for i := 0 to ColumnsList.Count - 1 do
  begin
    s := ColumnsList[i].Title.Caption;
    if i <> ColumnsList.Count - 1 then
      s := s + Separator;
    StreamWriteString(Stream, s);
//    Stream.Write(PChar(s)^, Length(s));
  end;
end;
Good luck!
新聞熱點
疑難解答