数据库有些是char(50)宽度的,但实际上可能会只有几个数字,用DBGrid来显示的时候很不美观,想做一个过程来让DBGrid自动适应列宽。
但是效果总是实现不了,有时缩得太短,更难看,有些又太长。
希望能一起讨论讨论:
QQ : 448195212procedure TTestFrm.MakeDBGridColumnsAutoFixItsWidth(objDBGrid:T用);
var
cc : integer;
i,tmpLength : Integer;
objDataSet : TDataSet;
aDgCLength : array of integer;
tmpStr : String;
begin
cc := objDbGrid.Columns.Count - 1;
objDataSet := objDbGrid.DataSource.DataSet;
setlength(aDgCLength,cc+1);
//
for i := 0 to cc do
begin
aDgCLength[i] := length(objDbGrid.Columns[i].Title.Caption);
end; objDataSet.First;
while not objDataSet.Eof do
begin
//
for i :=0 to cc do
begin
tmpStr := objDataSet.Fields.Fields[i].AsString;
tmpStr := DM.MyDeleteSpace(tmpStr);
showmessage(tmpStr);
tmpLength := length(tmpStr);
//showmessage('111:'+intToStr(length(objDataSet.Fields.Fields[i].AsString)));
if tmpLength>aDgCLength[i]
then
begin
aDgCLength[i] := tmpLength;
//showmessage(intToStr(aDgCLength[i])); //------??
end;
end;
objDataSet.Next;
end;
//showmessage(intToStr(aDgCLength[i]));
for i := 0 to cc do
begin
objDbGrid.Columns[i].Width := aDgCLength[i];
objDbGrid.Columns[i].Title.Alignment := tacenter;
end;
objDbGrid.Options := [dgTitles,dgIndicator,dgColumnResize,dgColLines,
dgRowLines,dgTabs,dgConfirmDelete,dgCancelOnExit];
end;
但是效果总是实现不了,有时缩得太短,更难看,有些又太长。
希望能一起讨论讨论:
QQ : 448195212procedure TTestFrm.MakeDBGridColumnsAutoFixItsWidth(objDBGrid:T用);
var
cc : integer;
i,tmpLength : Integer;
objDataSet : TDataSet;
aDgCLength : array of integer;
tmpStr : String;
begin
cc := objDbGrid.Columns.Count - 1;
objDataSet := objDbGrid.DataSource.DataSet;
setlength(aDgCLength,cc+1);
//
for i := 0 to cc do
begin
aDgCLength[i] := length(objDbGrid.Columns[i].Title.Caption);
end; objDataSet.First;
while not objDataSet.Eof do
begin
//
for i :=0 to cc do
begin
tmpStr := objDataSet.Fields.Fields[i].AsString;
tmpStr := DM.MyDeleteSpace(tmpStr);
showmessage(tmpStr);
tmpLength := length(tmpStr);
//showmessage('111:'+intToStr(length(objDataSet.Fields.Fields[i].AsString)));
if tmpLength>aDgCLength[i]
then
begin
aDgCLength[i] := tmpLength;
//showmessage(intToStr(aDgCLength[i])); //------??
end;
end;
objDataSet.Next;
end;
//showmessage(intToStr(aDgCLength[i]));
for i := 0 to cc do
begin
objDbGrid.Columns[i].Width := aDgCLength[i];
objDbGrid.Columns[i].Title.Alignment := tacenter;
end;
objDbGrid.Options := [dgTitles,dgIndicator,dgColumnResize,dgColLines,
dgRowLines,dgTabs,dgConfirmDelete,dgCancelOnExit];
end;
netfly(支点),如果是数字,就缩短了。
安装方法:
完整的打开,然后切换到frame单元,component -> create component template,这样就出现了一个新组建页和创建了新的组建。如果使用的时候编译出现错误,可能是没有uses,要uses DBClient;