如果您想了解delphi–设置TDBGrid可见行和delphidbgrid属性的知识,那么本篇文章将是您的不二之选。我们将深入剖析delphi–设置TDBGrid可见行的各个方面,并为您解答delp
如果您想了解delphi – 设置TDBGrid可见行和delphi dbgrid属性的知识,那么本篇文章将是您的不二之选。我们将深入剖析delphi – 设置TDBGrid可见行的各个方面,并为您解答delphi dbgrid属性的疑在这篇文章中,我们将为您介绍delphi – 设置TDBGrid可见行的相关知识,同时也会详细的解释delphi dbgrid属性的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- delphi – 设置TDBGrid可见行(delphi dbgrid属性)
- DbGridToExcel(Delphi)
- Delphi 7 中DBGrid的排序
- Delphi DBGrid 实现复选框
- delphi dbgrideh 列宽度自适应问题
delphi – 设置TDBGrid可见行(delphi dbgrid属性)
假设我从数据库中选择了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?
解决方法
type TCustomDBGridHack = class(TCustomDBGrid); procedure SetVisibleRows(DBGrid: TCustomDBGrid; VisibleRows: Integer); var TitleHeight,RowHeight: Integer; begin with TCustomDBGridHack(DBGrid) do begin if dgTitles in Options then begin TitleHeight := RowHeights[0] + Gridlinewidth; RowHeight := RowHeights[1] + Gridlinewidth; end else begin TitleHeight := 0; RowHeight := RowHeights[0] + Gridlinewidth; end; end; DBGrid.ClientHeight := TitleHeight + (RowHeight * VisibleRows) + 1; end;
或者按照@nil的建议使用TGridDrawInfo.它产生更准确的结果(我稍微修改了一下):
procedure SetVisibleRows(DBGrid: TCustomDBGrid; VisibleRows: Integer); var DrawInfo: TGridDrawInfo; TitleHeight,RowHeight: Integer; begin with TCustomDBGridHack(DBGrid) do begin CalcDrawInfo(DrawInfo); TitleHeight := DrawInfo.Vert.FixedBoundary; RowHeight := RowHeights[DrawInfo.Vert.FirstGridCell] + DrawInfo.Vert.Effectivelinewidth; end; DBGrid.ClientHeight := TitleHeight + (RowHeight * VisibleRows) + 1; end;
正如@nil所提到的,RowHeight也可以用以下公式计算:
RowHeight := DrawInfo.Vert.GetExtent(DrawInfo.Vert.FirstGridCell) + DrawInfo.Vert.Effectivelinewidth;
我没有发现任何差异. (应进一步调查).
以上可以进一步改进,以使TDBGrid滚动条更好地调整:
procedure SetVisibleRows(DBGrid: TCustomDBGrid; VisibleRows: Integer); var DrawInfo: TGridDrawInfo; TitleHeight,RowHeight: Integer; HasActiveDataSet: Boolean; begin if VisibleRows < 0 then VisibleRows := 0; HasActiveDataSet := Assigned(DBGrid.DataSource) and Assigned(DBGrid.DataSource.DataSet) and DBGrid.DataSource.DataSet.Active; if HasActiveDataSet then DBGrid.DataSource.DataSet.disableControls; try with TCustomDBGridHack(DBGrid) do begin CalcDrawInfo(DrawInfo); TitleHeight := DrawInfo.Vert.FixedBoundary; RowHeight := RowHeights[DrawInfo.Vert.FirstGridCell] + DrawInfo.Vert.Effectivelinewidth; end; DBGrid.ClientHeight := TitleHeight + (RowHeight * VisibleRows) + 1; finally if HasActiveDataSet then DBGrid.DataSource.DataSet.EnableControls; end; end;
DbGridToExcel(Delphi)
总结
以上是小编为你收集整理的DbGridToExcel(Delphi)全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
Delphi 7 中DBGrid的排序
总结
以上是小编为你收集整理的Delphi 7 中DBGrid的排序全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
Delphi DBGrid 实现复选框
1
在数据库对应的表中加入 bit 列验证是否被选中
然后 dbgrid 第一列的 filedname 是 bit 列
在 DBgrid 的 onDrawColumnCell 事件中写:
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
CtrlState: array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
begin
if column.Field.DataType=ftboolean then
begin
DBGrid1.Canvas.FillRect(rect);
drawframecontrol(DBGrid1.Canvas.Handle,rect,dfc_button,ctrlstate[column.Field.asboolean]);
end;
end;
上方事件写完后会在第一行第一列出现复选框
2
在 dbgrid 的 oncellclick 事件中写,目的就是实现单击时 复选框被选中
procedure TcgDaohuodj.DBGrid1CellClick(Column: TColumn);
begin
if DBGrid1.SelectedField.DataType=ftboolean then
begin
DBGrid1.SelectedField.DataSet.Edit;
DBGrid1.SelectedField.AsBoolean:=not DBGrid3.SelectedField.AsBoolean;
DBGrid1.SelectedField.DataSet.Post;
end;
end;
3
在 dbgrid 的 ontitileclick 事件中写如下代码,目的是点击 bit 列是实现全选和全消
procedure DBGrid1TitleClick(Column: TColumn);
var i:integer;
begin
if column.Index=0 then begin //验证是否第一列
adoquery1.First; //游标回滚
DBGrid1.SelectedRows.CurrentRowSelected:=true; //第一行被选中
if trim(column.Title.Caption)=''全选'' then
begin
for i:=0 to dbgrid1.DataSource.DataSet.RecordCount-1 do
begin
dbgrid1.Fields[0].DataSet.edit;
dbgrid1.Fields[0].AsBoolean:=true;
dbgrid1.Fields[0].DataSet.post;
dbgrid1.datasource.dataset.next;
end;
column.Title.Caption:=''全消'';
end else begin
for i:=0 to dbgrid1.DataSource.DataSet.RecordCount-1 do
begin
dbgrid1.Fields[0].DataSet.edit;
dbgrid1.Fields[0].AsBoolean:=false;
dbgrid1.Fields[0].DataSet.post;
dbgrid1.datasource.dataset.next;
end;
column.Title.Caption:=''全选'';
end;
adoquery1.First; //游标回滚
DBGrid1.SelectedRows.CurrentRowSelected:=true; //选中第一行
end;
end;
效果如图:
delphi dbgrideh 列宽度自适应问题
总结
以上是小编为你收集整理的delphi dbgrideh 列宽度自适应问题全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
今天关于delphi – 设置TDBGrid可见行和delphi dbgrid属性的讲解已经结束,谢谢您的阅读,如果想了解更多关于DbGridToExcel(Delphi)、Delphi 7 中DBGrid的排序、Delphi DBGrid 实现复选框、delphi dbgrideh 列宽度自适应问题的相关知识,请在本站搜索。
本文标签: