dbgird是根据你字段的大小来设置长度的,因为有些字段基本上是那么几个字节,但是他也有特别的几个很长的特列,所有把它设置比较大,dbgird是根据字段大小来的.搞得我显示的数据到处都是空白,好难看.

解决方案 »

  1.   

    很麻烦,如果用TextWidth判断要遍历所有记录,我觉得不好,
    你可以将DBGrid的dgColumnResize属性改成true,然后自己调节
      

  2.   

    DBGrid1.DataSource.DataSet.FieldByName(字段名).DisplayWidth:=显示宽度
      

  3.   

    dbgrid1.columns[0].width:=100;   //设置第一列的宽度
    dbgrid1.columns[1].width:=100;
    dbgrid1.columns[2].width:=100;
    dbgrid1.columns[3].width:=100;
    ……
      

  4.   

    chenyuandxm(一剑平江湖) 说的对
      

  5.   

    //使dbGrid的内容自动适应他的宽度
    procedure MakeDBGridColumnsAutoFixItsWidth(objDBGrid:TDBGrid);
    var
      cc:integer;
      i,tmpLength:integer;
      objDataSet:TDataSet;
      aDgCLength:array of integer;
    begin
      cc:=objDbGrid.Columns.Count-1;
      objDataSet:=objDbGrid.DataSource.DataSet;
      setlength(aDgCLength,cc+1);
      file://取标题字段的长度
      for i:=0 to  cc do
      begin
        aDgCLength[i]:= length(objDbGrid.Columns[i].Title.Caption);
      end;  objDataSet.First;
      while not objDataSet.Eof do
      begin
        file://取列中每个字段的长度
        for i:=0 to  cc do
        begin
          tmpLength:=length(objDataSet.Fields.Fields[i].AsString);
          if tmpLength>aDgCLength[i]
          then aDgCLength[i]:=tmpLength;
        end;
        objDataSet.Next;
      end;
      for i:=0 to  cc do
      begin
        objDbGrid.Columns[i].Width:=aDgCLength[i]*7;
      end;
    end;
      

  6.   

    可以在设计时期设置,在DBGIRD编辑器中,选择某列后,设置WIDTH属性也可在运行期间设置,格式:DBGIRD1.COLUMNS[0].WIDTH:=数值
      

  7.   

    adoquery1.fieldbyname('AAA').displaywidth:=10;