【发布时间】:2017-11-15 09:08:55
【问题描述】:
我想在给定VisibleRows 参数的情况下调整 TDBGrid 高度。网格可能有也可能没有标题。
假设我从数据库中选择了 100 条记录,但我希望调整网格高度以显示前 10 行(使它们可见)。数据集仍将包含 100 条记录。
即
procedure SetVisibleRows(DBGrid: TCustomDBGrid; VisibleRows: Integer);
begin
...
DBGrid.Height := ???
end;
我知道如何获取可见行:
type
TCustomGridHack = class(TCustomGrid);
function GetVisibleRows(DBGrid: TCustomDBGrid): Integer;
begin
Result := TCustomGridHack(DBGrid).VisibleRowCount;
end;
但是,有没有办法设置VisibleRowCount?
【问题讨论】:
-
@nil,谢谢。我知道这是一个只读属性。我实际上是从 “增加或减少高度直到 VisibleRowCount 和 DesiredVisibleRows 相同”开始的” - 但我不喜欢它。请参阅我的答案以获得可能的解决方案。
-
我明白,尝试感觉不太好。我当时尝试的与您的类似,但基于网格创建的绘制信息。
-
@nil,我确实看到了
GetVisibleRowCount方法,但是网格客户端高度是否可以由TGridDrawInfo设置?我只找到了它的计算。如果您有工作代码,请随时分享:) -
没有什么比你的代码更重要的了。除了使滚动条表现得时髦之外。正在考虑这样的事情:
-
过程 SetVisibleRows(DBGrid: TCustomDBGrid; VisibleRows: Integer); var AGridDrawInfo: TGridDrawInfo; AClientHeight:整数;一:整数;开始 TDBGridAccess(DBGrid).CalcDrawInfo(AGridDrawInfo); AClientHeight := AGridDrawInfo.Vert.FixedBoundary;对于 I := AGridDrawInfo.Vert.FirstGridCell 到 VisibleRows do Inc(AClientHeight, (AGridDrawInfo.Vert.GetExtent(I) + AGridDrawInfo.Vert.EffectiveLineWidth)); DBGrid.ClientHeight := AClientHeight;结束;