Ehlib的DBGridEh首列加序号 必须有首列(建一个)
dbgrideh-options-dgzndicator设置为false
dbgrideh.columns[0]-visual-color可以区分其他列的颜色
procedure TDBViewFrm.DBGridEh1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
begin
if Column.Index = 0 then
if DBGridEh1.SumList.RecNo <> -1 then
DBGridEh1.Canvas.TextRect(Rect, Rect.Left + 3, Rect.Top + 2,
IntToStr(DBGridEh1.SumList.RecNo));
end;
************************************************
procedure TDBViewFrm.DBGridEh1TitleClick(Column: TColumnEh); //对dbgrid点击标题栏排序
var i: Integer;
begin
if ADOQuery1.Active = True then
begin
for i := 1 to DBGridEh1.Columns.Count do
begin //恢复所有标题字体为默认
DBGridEh1.Columns[i - 1].Title.Font.Color := clWindowText;
DBGridEh1.Columns[i - 1].Title.Font.Style := [];
end;
if (Column.Index <> 0) and (Column.Index <> 9) then //去掉不需要排序或不能排序的列。
begin
if ADOQuery1.Sort <> (Column.FieldName + ' ASC') then //判断原排序方式
begin
ADOQuery1.Sort:= Column.FieldName + ' ASC';
Column.Title.Font.Color := clRed; //改变标题行字体为红色,表示当前的排序方式为升序
Column.Title.Font.Style := [fsBold];
end
else
begin
ADOQuery1.Sort:= Column.FieldName + ' DESC';
Column.Title.Font.Color := clBlue; //改变标题行字体为红色,表示当前的排序方式为降序
Column.Title.Font.Style := [fsBold];
end;
end;
end;
end;
*********************************************************************
DBGridEh中分行分列、单元格的颜色设置
(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;
(4)交叉设置列颜色
1、为DBGridEh的每列的Color属性设置值。
2、将DBGridEh的RowColorFlag设为false;
注:DBGridEh1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
Rect:代表在画布中cell的位置位置所在,也就是你要对哪个区域进行重画;
DataCol:代表columns数组中column的标号
Column:描述cell的显示属性和对应的字段属性的tcolumn对象
State:描述cell是否有输入焦点、是否被选中、是否处于锁定模式(如同column header) *******************************************************************
(5)设置格线颜色
procedure Tfm1.FormCreate(Sender: TObject);
begin
dbgrideh2.FixedColor:=clWhite;
dbgrideh2.GridLineColors.DarkColor:=clRed;
dbgrideh2.GridLineColors.BrightColor:=clRed;
dbgrideh2.Flat:=true; dbgrideh2.Ctl3D:=false; //这样就可以设置边框颜色 dbgrideh2.Options:=dbgrideh2.Options+[dgRowSelect];
end;
*******************************************************************
(5)多行选择复制 procedure Tfm1.btnCopyClick(Sender:TObject);
var i:integer; booklist:TBookmarklist; bookstr:Tbookmarkstr;
begin
bookstr:=Table1.bookmark;
try
booklist:=dbgrideh2.SelectedRows;
for i:=0 to booklist.count-1 do
begin
Table1.bookmark:=booklist[i];
Memo1.lines.add(Table1.fieldbyname('字段1').asstring);
Memo1.lines.add(Table1.fieldbyname('字段2').asstring);
end;
finally
Table1:=bookstr;
end;
end;
*******************************************************************
(6) 动态创建列 并设置 列的 标题、绑定字段、页脚类型
procedure TfrmPm_scQuery.FormCreate(Sender: TObject);
var r,c:integer;
str:string;
begin
qrytem.Close;
qrytem.SQL.Clear;
qrytem.SQL.Add('select group_id,count(*) num from basesizes group by group_id order by num desc');
qrytem.Open;
if qrytem.IsEmpty then
begin
showmessage('尺码表为空,无法创建尺码表头,请先输入尺码组');
exit;
end;
qrytem.First;
vpri_sizegroup:=qrytem.RecordCount; //尺码组 数量
vpri_sizenum:=qrytem.Fields[1].AsInteger; //尺码个数最多的一组 num
vpri_sizebegin:=4;
while(dbgrideh2.Columns.Count-1>=vpri_sizebegin) do
DBGridEh2.Columns.Delete(DBGridEh2.Columns.Count-1);
for c:=1 to vpri_sizenum do
begin
dbgrideh2.Columns.Add;
qrytem.Close;
qrytem.SQL.Clear;
qrytem.SQL.Add('select a.group_id,a.num,b.sizes from (select group_id,count(*) num from basesizes group by group_id ) a,basesizes b where a.group_id*=b.group_id and b.sort='+intTostr(c)+' order by a.num desc');
qrytem.Open;
qrytem.First;
str:='';
while not qrytem.Eof do
begin
if str<>'' then
begin
if trim(qrytem.fieldbyname('sizes').AsString)<>'' then
str:=str+'|'+trim(qrytem.fieldbyname('sizes').AsString)
else str:=str+'| ';
end
else str:=trim(qrytem.fieldbyname('sizes').AsString);
qrytem.Next;
end;
dbgrideh2.Columns[vpri_sizebegin+c-1].Title.Caption:=str;
dbgrideh2.Columns[vpri_sizebegin+c-1].Width:=38;
dbgrideh2.Columns[vpri_sizebegin+c-1].DisplayFormat:='#';
dbgrideh2.Columns[vpri_sizebegin+c-1].FieldName:='s'+intTostr(c);
dbgrideh2.Columns.Items[vpri_sizebegin+c-1].Footer.ValueType:=fvtSum; //正统使用方法
//dbgrideh2.Columns[vpri_sizebegin+c-1].Footer.ValueType:=fvtSum; //效果一样
//dbgrideh2.Columns.Items[vpri_sizebegin+c-1].Footers.add; //配合下面一句使用 效果一样
//dbgrideh2.Columns[vpri_sizebegin+c-1].Footers[0].ValueType:=fvtSum; //报错 footers[0] 没有创建
end;
dbgrideh2.Columns.Add;
dbgrideh2.Columns[vpri_sizebegin+vpri_sizenum].Title.Caption:='数量';
dbgrideh2.Columns[vpri_sizebegin+vpri_sizenum].Width:=54;
dbgrideh2.Columns[vpri_sizebegin+vpri_sizenum].FieldName:='num';
dbgrideh2.Columns.Items[vpri_sizebegin+cvpri_sizenum].Footer.ValueType:=fvtSum;
dbgrideh2.Columns.Add;
dbgrideh2.Columns[vpri_sizebegin+vpri_sizenum+1].Title.Caption:='金额';
dbgrideh2.Columns[vpri_sizebegin+vpri_sizenum+1].Width:=62;
dbgrideh2.Columns[vpri_sizebegin+vpri_sizenum+1].FieldName:='almoney';
dbgrideh2.Columns.Items[vpri_sizebegin+vpri_sizenum+1].Footer.ValueType:=fvtSum;
dbgrideh2.Columns.Add;
dbgrideh2.Columns[vpri_sizebegin+vpri_sizenum+2].Title.Caption:='备注';
dbgrideh2.Columns[vpri_sizebegin+vpri_sizenum+2].Width:=86;
dbgrideh2.Columns[vpri_sizebegin+vpri_sizenum+2].FieldName:='remark';
end;