2021-09-12

Delphi中DBgridEH的基本用法

A 壹零贰肆 2019-06-17 15:44:43 3651 收藏 7
分类专栏: Delphi 文章标签: DbgridEh
版权

Delphi
专栏收录该内容
10 篇文章0 订阅
订阅专栏
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;
————————————————

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值