DBGridEh随记
interface
THackDBGridEH = class(TCustomdbgrideh)
end;
procedure OptimizeGrid(AGrid: TCustomDbGridEh);
implementation
procedure OptimizeGrid(AGrid: TCustomDbGridEh);
var
i: integer;
begin
// 優化GRID的寬度
for i := 0 to TDBGridEh(AGrid).Columns.count - 1 do
THackDBGridEH(AGrid).OptimizeSelectedColsWidth(TDBGridEh(AGrid).Columns[i]);
end;
=========================================================
一直在找最好的根据DBGridEH(或者DBGrid)的内容和标题栏设置自适应列宽的方法,一直没有太好的。今天从园地上发现了源码:地址如下,非常好用。与大家分享:
http://www.delphifans.com/SoftView/SoftView_2019.html
代码哪下:
//需要定义这个类,才能使用OptimizeSelectedColsWidth方法调整列宽
type
TZYDBGridEH = class(TCustomDBGridEh)
public
end;
我在原来的基础上进行修改的实现代码:
//表格内容和字段标题宽度设置列宽
procedure SetDBGridColumnsWidth(Grid: TCustomDBGridEh);
var
i: integer;
begin
if not Assigned(Grid.DataSource) then Exit;
if not Grid.DataSource.Dataset.Active then Exit;
try
Grid.DataSource.Dataset.DisableControls;
for i := 0 to TDBGridEh(Grid).Columns.Count - 1 do
begin
TZYDBGridEh(Grid).OptimizeSelectedColsWidth(TDBGridEh(Grid).Columns[i]);
end;
Grid.DataSource.Dataset.EnableControls;
except on E: Exception do
begin
Error('设置表格' + Grid.Name + '出错!' + E.Message);
end;
end;
end;
=======================================================
DBGridEh可以,先设置UseMultiTitle为true
再设置每列的标题:
Columns.Title.Caption:='编号'
Columns.Title.Caption:='应扣款|水电'
Columns.Title.Caption:='应扣款|其它'
Field1.DisplayLabel := 'Title1|SubTitle1';
Field2.DisplayLabel := 'Title1|SubTitle2';
或
DBGridEh.Columns[0].Title.Caption := 'Title1|SubTitle1';
DBGridEh.Columns[1].Title.Caption := 'Title1|SubTitle2'
=======================================
(2)行
某些行,如某个字段包含特殊的字符串、工资大于某个值时,希望行用不同的颜色展示;
此时要使用DBGrid1DrawColumnCell事件;
对Table的某个字段的值进行判断,如:
if AnsiContainsStr(ADOTable1.FieldByName('ProductName').AsString,'金属') then
begin
DBGrid1.Canvas.Font.Color := clred;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
如果产品名称包含“金属”,那么整行字体为红色;
如果要改变底色,则使用DBGrid1.Canvas.Brush.Color := clblack
在DBGrid中改变第n列的颜色
在DBGrid的OnDrawCell事件中加入:
If Column=DBGrid1.Columns[n] then //也可用Column.FileName=字段名
DBGrid1.Canvas.brush.Color:=clRed;
===================================================
(1)分行不同颜色设置;在DBGridEh1DrawColumnCell中写;
if ADOQuery1.RecNo mod 2=0 then
begin
DBGridEh1.Canvas.Font.Color := clRed;
DBGridEh1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end
else begin
DBGridEh1.Canvas.Font.Color := clGreen;
DBGridEh1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
(2)分行不同背景颜色设置;在DBGridEh1DrawColumnCell中写;
if ADOQuery1.RecNo mod 2=0 then
begin
DBGridEh1.Canvas.Brush.Color := clRed;
DBGridEh1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end
else begin
DBGridEh1.Canvas.Brush.Color := clGreen;
DBGridEh1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
(3)符合条件的单元格颜色或者背景颜色设置;在DBGridEh1DrawColumnCell中写;
if Column.FieldName='价格' then
begin
if ADOQuery1.FieldByName('价格').AsFloat<0 then
begin
DBGridEh1.Canvas.Font.Color := clRed;
DBGridEh1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
================================================
1、DBGrideh最低下加上总计的栏
DBGridEh.FooterRowCount := 1;
DBGridEh.FooterColor := clYellow;
DBGridEh.SumList.Active := True;
DBGridEh.Columns[0].Footer.ValueType := fvtStaticText;
DBGridEh.Columns[0].Footer.Value := '总计:';
DBGridEh.Columns[1].Footer.ValueType := fvtCount; //fvtSum