Цитата:
Сообщение от ART
Ширина в зависимости от ширины содержимого
|
К сожалению у стандартного DBGrid'а нет такого свойства.
Так как DBGrid автоматически очень неудачно делает ширину, то я когда-то написал процедурку выравнивающую колонки по содержимому и в нужных местах её использую (обычно сразу после открытия таблицы):
Код:
procedure CalcDBGridColumnWidths(DBGrid: TDBGrid);
var
DataSet: TDataSet;
OldRecNo: Integer;
MaxWidths: array of Integer;
i, Width: Integer;
begin
if (DBGrid = nil) or (DBGrid.DataSource = nil) or (DBGrid.DataSource.DataSet = nil) then Exit;
DataSet := DBGrid.DataSource.DataSet;
OldRecNo := DataSet.RecNo;
DataSet.DisableControls;
try
SetLength(MaxWidths, DBGrid.Columns.Count);
for i := 0 to DBGrid.Columns.Count - 1 do
begin
MaxWidths[i] := DBGrid.Canvas.TextWidth(DBGrid.Columns[i].Title.Caption) + 4;
end;
DataSet.First;
while not DataSet.Eof do
begin
for i := 0 to DBGrid.Columns.Count - 1 do
begin
Width := DBGrid.Canvas.TextWidth(DBGrid.Columns[i].Field.DisplayText) + 4;
if Width > MaxWidths[i] then MaxWidths[i] := Width;
end;
DataSet.Next;
end;
for i := 0 to DBGrid.Columns.Count - 1 do
begin
DBGrid.Columns[i].Width := MaxWidths[i];
end;
finally
DataSet.RecNo := OldRecNo;
DataSet.EnableControls;
end;
end;
Только учти, что она при вычислении ширины колонок проходится по всей таблице, что может занять значительное время если таблица очень большая.