cxgrid只要绑定datasource,默认情况下列宽就会按照字段的宽度自动调整,但是如果recordcount<1时也调整。这样会很难看。
怎么把它的列宽固定?

解决方案 »

  1.   

    dataset打开,列宽就不是设计时候的宽度了
      

  2.   

    在optionview下有一个columnautowidth改成false
      

  3.   

    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;
      

  4.   

    把列宽存在一个INI文件或存在数据库里
    然后FOR I:=0 TO cxGrid1DBTableView1.ColumnCount-1 DO
    cxGrid1DBTableView1.Columns[i].Width:= 调出来的数据.
      

  5.   

    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;//就是在这种情况下宽度不可控制大家还有什么高招?有没有什么属性?
      

  6.   

    在 ado的afterOpen里写:cxgrid.tableview.columns[i].width=80就OK了
      

  7.   

    包cxGrid的相关信息记录在一个文件里
    启动的时候就加载这个文件,对应cxGrid相应的对象(当然含列宽啦!)进行设置就可以达到目的。