我正在使用Dev Express DBGrid组件,我想缩放我的列以适合我的行文本,所以我使用了:
{{1}}
虽然有效,但速度太慢,所以我做了一些搜索,我找到了这篇文章on Dev Express Website,但这对我没什么帮助。所以我开始观察网格交互性,这让我发现,如果我一个接一个地双击网格的所有右边界,网格将完美而快速地缩放 如下图所示:
然后我继续到最后一个边界来获得这个结果:
我试图通过代码拼命点击这次双击,但我缺乏Delphi和Dev Express的经验。那么如何在所有列中逐个连续触发此事件。
谢谢
答案 0 :(得分:2)
下面的代码与双击每个标题单元格的rhs相同。
代码:
procedure TForm1.ApplyBestFits;
var
i : Integer;
begin
try
cxGrid1DBTableView1.BeginUpdate;
for i := 0 to cxGrid1DBTableView1.ColumnCount - 1 do begin
cxGrid1DBTableView1.Columns[i].ApplyBestFit;
end;
finally
cxGrid1DBTableView1.EndUpdate;
end;
end;
但是,我不确定它是否是您问题的完整解决方案。 在我的测试用例中,有100列和2000个数据行,需要一两秒钟 执行,我想象的比你希望的要慢得多。所以它可能需要一些优化。
一个明显的优化是只调用cxGrid1DBTableView1.Columns[i].ApplyBestFit
对于DBTableView的客户端rect内的列。另一种可能是限制
连接到tableview的数据集中的行数为较小的数字。例如,以下仅将ApplyBestFit调用到其Left坐标位于cxGrid宽度内的列。
procedure TForm1.ApplyBestFits;
var
i : Integer;
ALeft : Integer;
ACol : TcxGridColumn;
begin
try
ALeft := 0;
cxGrid1DBTableView1.BeginUpdate;
// Process only the visible columns whose Left properties
// are within the width of the grid
for i := 0 to cxGrid1DBTableView1.VisibleColumnCount - 1 do begin
ACol := cxGrid1DBTableView1.VisibleColumns[i];
ACol.ApplyBestFit;
Inc(ALeft, ACol.Width);
if ALeft > cxGrid1.Width then
Break;
end;
finally
cxGrid1DBTableView1.EndUpdate;
end;
end;