【问题标题】:how can i colour whole row in DBGrid with rowselect turned off?如何在关闭行选择的情况下为 DBGrid 中的整行着色?
【发布时间】:2016-07-21 02:03:03
【问题描述】:

RowSelect 破坏了 OnCellClick 的功能,所以我需要关闭 RowSelect。 那么如何通过突出显示当前行的所有单元格来模拟行选择的外观呢?

【问题讨论】:

  • 这个问题本质上不是问如何修复 RowSelect 吗?这个 RowSelect-OnCellClick 不兼容错误是否记录在某处?
  • 你完全正确,对不起。评论已删除。

标签: delphi tdbgrid


【解决方案1】:

这对我有用(dgRowSelect=FalsedgMultiSelect=False):
声明 DBGridGridDataLink 的 hack 类型以访问受保护的方法 和两个变量

type
  THackGrid = class(TDBGrid);
  THackDataLink = class(TGridDataLink);
var
  HackGrid: THackGrid;
  HackDataLink: THackDataLink;

OnFormCreate 中分配变量以使其在绘图时可用:

procedure TMyForm.FormCreate(Sender: TObject);
begin
  HackGrid := THackGrid(MainGrid);
  HackDataLink := THackDataLink(HackGrid.DataLink);
end;

并使用TGridDataLink.GetActiveRecord 测试选定的行:

procedure TMyForm.MainGridDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if Not (gdSelected in State) and (HackGrid.Row = HackDataLink.GetActiveRecord + 1) then
    MainGrid.Canvas.Brush.Color := clInfoBk;

  MainGrid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

【讨论】:

    【解决方案2】:

    使用TDBGrid.OnDrawColumnCell 事件,并设置State 以指示该行被选中。

    procedure TfrmPrimaryCare.dbGrdPCClaimsDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var
      NewState: TGridDrawState;
      RowSelected: Boolean;
    begin
      NewState := State;
      RowSelected := (Sender as TDBGrid).SelectedRows.CurrentRowSelected;
      if (RowSelected) then
        NewState := NewState + [gdSelected];
      TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, NewState);
    end;
    

    【讨论】:

    • 但是 ThisRowIsSelected 是什么?
    • 澄清一下,我知道如何为单元格着色,但我不知道如何检测该行是否为当前选定的行。
    • 您的问题专门询问“如何通过突出显示当前行的所有单元格来模拟行选择的外观?”,这是我回答的问题。如果您对如何使用dgRowSelect = False 跟踪所选行有不同的问题,请提出一个新问题。 :-)
    • 每当您有时间将其作为新问题发布时,我都会回答您的其他问题(关于检测是否选择了当前行)。
    • 这里改写了问题; link 如有任何混淆,请见谅。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 2023-03-19
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多