zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    文件上传和下载
    代理模式
    设计模式分类
    单例模式
    抽象工厂模式
    成长
    Java教程
    python面试大全
    python入门教程
    收藏网摘
  • 原文地址:https://www.cnblogs.com/mingdep/p/2318362.html
Copyright © 2011-2022 走看看