Delphi中DBgridEH的基本用法

1.复杂标题的制作

标题行可设为2行以上高度,并可以为多列创建一个共同的父标题行。为实现这个效果,需在各个列标题属性中以“|”分隔父标题和子标题,如办公用品包括代码和名称两部分,具体属性设置如下:

usemultititile := true;
titlelines := 2;
DBGridEh.Columns[0].Title.Caption := '办公用品|代码 ';
DBGridEh.Columns[1].Title.Caption := '办公用品|名称 ';

2.DBGridEh组件可以在标题行单元格中显示小三角形升、降排序标志符图片,在运行时可点击标题行,图片自动切换并做相应排序。

SortMarkedColumns   为当前排序列可在运行时使用.
然后在该列的ontitleBtnclick事件中添加代码:

procedure   ***From.DBGridEh1TitleBtnClick(Sender : TObject; 
                                        ACol : Integer; Column : TColumnEh);
var
  sortstring : string;   //排序列
begin
//进行排序
with Column do
begin
    if FieldName = '' then Exit;
    if TADOQuery(TDBGridEh(Sender).DataSource.DataSet).Active = False then Exit;
    case Title.SortMarker of
        smNoneTh :
            begin
                Title.SortMarker := smDownEh;
                sortstring := Column.FieldName + ' ASC ';
            end;
        smDownEh :
            begin
                sortstring := Column.FieldName + ' ASC '; 
            end;
        smUpEh :
            begin
                sortstring := Column.FieldName + ' DESC ';    
            end;
    try
        TADOQuery(TDBGridEh(Sender).DataSource.DataSet).Sort := sortstring
    except
    end;
end;

如果单击无效果,看看设置相应的属性是否可行:

DBGridEh中的: 属性OptionsEh中的子属性dghAutoSortMarking:设置为true;  

DBGridEh中某一列的属性Title中的子属性TitleButton:设置为true   ;

 

3.在dbgrideh中允许选择多行,如何知道哪些行被选中?

procedure TForm1.Button1Click(Sender: TObject);
var
 i, j: Integer;
 s: string;
begin
 if DBGrid1.SelectedRows.Count>0 then
   with DBGrid1.DataSource.DataSet do
     for i:=0 to DBGrid1.SelectedRows.Count-1 do
     begin
       GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
       for j := 0 to FieldCount-1 do
       begin
         if (j>0) then s:=s+', ';
         s:=s+Fields[j].AsString;
       end;
       Listbox1.Items.Add(s);
       s:= '';
     end;
end; 

4.dbgrideh 上选择多行之后,要求把所选择的记录全部添加入SQL数据库的一个固定表中。

procedure TForm1.Button1Click(Sender: TObject);
var
 i, j: Integer;
 s: string;
begin
 if DBGrid1.SelectedRows.Count>0 then
   with DBGrid1.DataSource.DataSet do
     for i:=0 to DBGrid1.SelectedRows.Count-1 do
     begin
       GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
       for j := 0 to FieldCount-1 do
       begin
 
         if (j>0) then s:=s+', ';
         s:=s+Fields[j].AsString;
       end;
       Listbox1.Items.Add(s);
       s:= '';
     end;
end;

5.导出Excel

uses DBGridEhImpExp;
procedure TfrmEmplyExport.OutToFile(IADO : TADOQuery; DgEh : TDBGridEh);
var
  ExpClass:TDBGridEhExportclass;
  Ext:String;
  FSaveDialog: TSaveDialog;
begin
  try
    if not IADO.IsEmpty then
    begin
      FSaveDialog := TSaveDialog.Create(Self);
      FSaveDialog.Filter:='Excel 文档 (*.xls)|*.XLS|Text files (*.txt)|*.TXT|Comma separated values (*.csv)|*.CSV|HTML file (*.htm)|*.HTM|Word 文档 (*.rtf)|*.RTF';
      if FSaveDialog.Execute and (trim(FSaveDialog.FileName)<>'') then
      begin
        case FSaveDialog.FilterIndex of
            1: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'xls'; end;
            2: begin ExpClass := TDBGridEhExportAsText; Ext := 'txt'; end;
            3: begin ExpClass := TDBGridEhExportAsCSV; Ext := 'csv'; end;
            4: begin ExpClass := TDBGridEhExportAsHTML; Ext := 'htm'; end;
            5: begin ExpClass := TDBGridEhExportAsRTF; Ext := 'rtf'; end;
        end;
        if ExpClass <> nil then
        begin
          if UpperCase(Copy(FSaveDialog.FileName,Length(FSaveDialog.FileName)-2,3)) <> UpperCase(Ext) then
            FSaveDialog.FileName := FSaveDialog.FileName + '.' + Ext;
            if FileExists(FSaveDialog.FileName) then
            begin
              if application.MessageBox('文件名已存在,是否覆盖   ', '提示', MB_ICONASTERISK or MB_OKCANCEL)<>idok then
                exit;
            end;
           Screen.Cursor := crHourGlass;
           SaveDBGridEhToExportFile(ExpClass,DgEh,FSaveDialog.FileName,true);
           Screen.Cursor := crDefault;
           MessageBox(Handle, '导出成功  ', '提示', MB_OK +
             MB_ICONINFORMATION);
          end;
      end;
      FSaveDialog.Destroy;
    end;
  except
    on e: exception do
    begin
      Application.MessageBox(PChar(e.message), '错误', MB_OK + MB_ICONSTOP);
    end;
  end;                       
end;

6.通用打印

unit uPrint;

interface

uses
  DBGridEh,PrnDbgeh,SysUtils,Graphics,Forms,Printers,windows;

procedure Prnt(AGrid:TDBGridEh;AOwner:Tform;APageHeader:string='';
  ALineType:TPageColontitleLineType=pcltnon);

implementation

procedure Prnt(AGrid:TDBGridEh;AOwner:TForm;APageHeader:string='';
  ALineType:TPageColontitleLineType=pcltnon);
var
  prn:TPrintDBGridEh;
begin
  if AGrid.DataSource.DataSet.IsEmpty then exit;
  prn:=TPrintDBGridEh.Create(AOwner);
  with prn.PageHeader do
  begin
    Font.Name:='宋体';
    Font.Size:=12;
    Font.Style:=[fsbold];
    LineType:=ALineType;
    CenterText.Text:=APageHeader;
  end;
  prn.DBGridEh:=AGrid;
  prn.Preview;
end;

end.

7.DBGridEh 隔行分色显示

procedure TForm1.DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh;
AFont: TFont; var Background: TColor; State: TGridDrawState);
begin
  if DBGridEh1.SumList.RecNo mod 2 = 1 then
   Background := $00FFC4C4
  else
   Background := $00FFDDDD;
end;

8.DBGridEh 在某些条件下某行显示特定颜色

procedure TForm1.DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh; AFont: TFont; var Background: TColor; State: TGridDrawState);
begin

 //在 name 字段值为 aaa 的行设置行背景色(ado 设置情况下)
 if ADOQuery1.FieldByName('name').AsString = 'aaa' then
   Background := $00FFC4C4

 //在 xm 字段值为 Li ming 的行设置行背景色(bde 设置情况下)
 else if DBGridEh1.DataSource.DataSet.FieldByName('xm').AsString = 'Li ming' then
   Background := $00FFC4C4
 else
   Background := $00FFDDDD;

end;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A 壹零贰肆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值