cxgrid都包含一个cxView的对象(名称可以修改),以下代码实现根据宽度平均分配列宽,供参考 var i,aWindh: Integer; strSql,cxViewCaption:String; begin if AdoQry.Active then AdoQry.Close; strSql:='SELECT * from ***'; AdoQry.SQL.Text := strSql; AdoQry.Open; //假定和名为AdoQry的TADOQuery对象绑定 cxView.ClearItems; cxView.DataController.CreateAllItems; aWindh := (cxGrid.Width-10) div (cxView.ColumnCount-1); for i:=1 to cxView.ColumnCount-1 do begin cxView.Columns[i].Width := aWindh; //宽度 cxView.Columns[i].Caption := '*****'; //表头或标题 end; cxView.Columns[0].Visible:=False; //隐藏第一列 end;
把列宽存在一个INI文件或存在数据库里 然后FOR I:=0 TO cxGrid1DBTableView1.ColumnCount-1 DO cxGrid1DBTableView1.Columns[i].Width:= 调出来的数据.
4楼5楼动态循环我没试,但如果数据量大的话打开速度肯定慢,至于3楼的我已经试过,如果recordcount<1宽度肯定是乱的。这是我的处理代码: if DataM.Q_1.RecordCount > 0 then begin for i:= 0 to cxGridViewGrid1DBTableView1.ColumnCount - 1 do begin cxGridViewGrid1DBTableView1.Columns[i].ApplyBestFit();//调整到最合适的宽度 end; cxGridViewGrid1DBTableView1.OptionsView.ColumnAutoWidth := False; end else cxGridViewGrid1DBTableView1.OptionsView.ColumnAutoWidth := True;//就是在这种情况下宽度不可控制大家还有什么高招?有没有什么属性?
var
i,aWindh: Integer;
strSql,cxViewCaption:String;
begin
if AdoQry.Active then AdoQry.Close;
strSql:='SELECT * from ***';
AdoQry.SQL.Text := strSql;
AdoQry.Open; //假定和名为AdoQry的TADOQuery对象绑定
cxView.ClearItems;
cxView.DataController.CreateAllItems;
aWindh := (cxGrid.Width-10) div (cxView.ColumnCount-1);
for i:=1 to cxView.ColumnCount-1 do
begin
cxView.Columns[i].Width := aWindh; //宽度
cxView.Columns[i].Caption := '*****'; //表头或标题
end;
cxView.Columns[0].Visible:=False; //隐藏第一列
end;
然后FOR I:=0 TO cxGrid1DBTableView1.ColumnCount-1 DO
cxGrid1DBTableView1.Columns[i].Width:= 调出来的数据.
begin
for i:= 0 to cxGridViewGrid1DBTableView1.ColumnCount - 1 do
begin
cxGridViewGrid1DBTableView1.Columns[i].ApplyBestFit();//调整到最合适的宽度
end;
cxGridViewGrid1DBTableView1.OptionsView.ColumnAutoWidth := False;
end
else cxGridViewGrid1DBTableView1.OptionsView.ColumnAutoWidth := True;//就是在这种情况下宽度不可控制大家还有什么高招?有没有什么属性?
启动的时候就加载这个文件,对应cxGrid相应的对象(当然含列宽啦!)进行设置就可以达到目的。