dbgrideh 使用技巧

 

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;

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值