View Full Version : سوال: تنظیم اندازه DATA GRIDE؟
  
majidmir
دوشنبه 29 شهریور 1389, 16:51 عصر
سلام
چطوری باید datagraid رو تنظیم کنم که اندازش به اندازه ای که طراحیش کردم در بیاد و اسکرول هاش نیان ؟
MOJTABAATEFEH
دوشنبه 29 شهریور 1389, 17:25 عصر
سلام
چطوری باید datagraid رو تنظیم کنم که اندازش به اندازه ای که طراحیش کردم در بیاد و اسکرول هاش نیان ؟ 
دوست عزیز با کد زیر می تونید ستون های DBgrid رو به صورت Autosize فیت کنید
procedure SetGridColumnWidths(Grid: Tdbgrid);
const
   DEFBORDER = 10;
var
  temp, n: Integer;
  lmax: array [0..30] of Integer;
begin
  with Grid do
    begin
      Canvas.Font := Font;
      for n := 0 to Columns.Count - 1 do
      lmax[n] := Canvas.TextWidth(Fields[n].FieldName) + DEFBORDER;
      grid.DataSource.DataSet.First;
      while not grid.DataSource.DataSet.EOF do 
        begin
          for n := 0 to Columns.Count - 1 do 
            begin
              temp := Canvas.TextWidth(trim(Columns[n].Field.DisplayText)) + DEFBORDER;
              if temp > lmax[n] then lmax[n] := temp;
            end; 
          grid.DataSource.DataSet.Next;
        end; 
      grid.DataSource.DataSet.First;
      for n := 0 to Columns.Count - 1 do
      if lmax[n] > 0 then
      Columns[n].Width := lmax[n];
    end; 
end; 
                       
procedure TForm1.Button1Click(Sender: TObject);
begin
  SetGridColumnWidths(dbgrid3);
end;
موفق باشید
majidmir
دوشنبه 29 شهریور 1389, 17:48 عصر
دوست عزیز با کد زیر می تونید ستون های DBgrid رو به صورت Autosize فیت کنید
procedure SetGridColumnWidths(Grid: Tdbgrid);
const
   DEFBORDER = 10;
var
  temp, n: Integer;
  lmax: array [0..30] of Integer;
begin
  with Grid do
    begin
      Canvas.Font := Font;
      for n := 0 to Columns.Count - 1 do
      lmax[n] := Canvas.TextWidth(Fields[n].FieldName) + DEFBORDER;
      grid.DataSource.DataSet.First;
      while not grid.DataSource.DataSet.EOF do 
        begin
          for n := 0 to Columns.Count - 1 do 
            begin
              temp := Canvas.TextWidth(trim(Columns[n].Field.DisplayText)) + DEFBORDER;
              if temp > lmax[n] then lmax[n] := temp;
            end; 
          grid.DataSource.DataSet.Next;
        end; 
      grid.DataSource.DataSet.First;
      for n := 0 to Columns.Count - 1 do
      if lmax[n] > 0 then
      Columns[n].Width := lmax[n];
    end; 
end; 
                       
procedure TForm1.Button1Click(Sender: TObject);
begin
  SetGridColumnWidths(dbgrid3);
end;
موفق باشید
دوست عزیز از لطفتون ممنون ! 
با این کد باید کل فرم هامو از نو طراحی کنم ! کدی یا خاصیتی بهم بدید که بتونم برای هر فیلد یه اندازه ثابت در نظر بگیرم ؟ 
در ضمن اگه من بتونم اندازه گرید رو ثابت کنم اونوقت خیلی بهتره . برای مثال توی عکس زیر نگاه کنید می خوام جوری تنظیمش کنم که اولا این اسکرول های از بین بره . دوما تمام فیلد ها توی همین کادر با همین اندازه نمایش داده بشن !!!!
MOJTABAATEFEH
دوشنبه 29 شهریور 1389, 18:02 عصر
دوست عزیز کد رو من امتحان کردم مشکل نداره برای اینکار تمام فیلدهاتون رو توی FieldEditor خود DBgrid اضافه کنید و با خاصیت Width تنظیم کنید امتحان کنید نتیجه رو اعلام کنید
موفق باشید
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.