PDA

View Full Version : سوال: مشخص نمودن width و alignment ستونهاي dbgrid كه در حالت اوليه ستونهايش مشخص نمي باشد



oghab
یک شنبه 19 آبان 1387, 19:51 عصر
با سلام
من يك dbgrid دارم كه يه يك adoquery وصله. آيتمهايي كه در select مربوط به adoquery نوشته ميشه در زمان اجرا مشخص ميشه و متغيره! يعني بسته به شرايطي selectlist ش متفاوت ميشه. و ستونهاي مختلفي از جداول مختلف( كه تعدادشون ميتونه زياد هم باشه و بسيار متغير و متفاوت هست ،) قراره در اين dbgrid نمايش پيدا كنه!
حالا اگه معلوم بود كه ستونها قراره چي باشه! يه كد مشابه در زمان طراحي مينوشتم و خصوصيات ستونهام را بنا بر هر فيلد تنظيم ميكردم.
ولي حالا كه ستونها مشخص نيست. دو تا مشكل دارم. يكي اينكه width هر ستون ميخوام اگه بشه حالت autowidth داشته باشه. يعني بسته به بزرگترين data اي در اون ستونه اندازه اش مشخص بشه! و يا اينكه حداقل يه طول ثابت براي همه ستونها مشخص كنم. مثلا همشون 110 باشند. تا بعضي از ستونها كه مقادير رشته اي مثلا 300 كاركتري براشون تعريف شده. عرض خيلي زيادي پيدا نكنند.
دوم اينكه بتونم alignment تمام ستون ها را leftJustify كنم تا هر كدوم يه سازي نزنند!
ممنون ميشم راهنمايي كنيد

mafazel
دوشنبه 20 آبان 1387, 08:22 صبح
و ستونهاي مختلفي از جداول مختلف( كه تعدادشون ميتونه زياد هم باشه و بسيار متغير و متفاوت هست ،) قراره در اين dbgrid نمايش پيدا كنه!
..... دوم اينكه بتونم alignment تمام ستون ها را leftJustify كنم تا هر كدوم يه سازي نزنند!

سلام دوست عزیز
میخواهید ستونهای مختلفی از جداول مختلفی (که تعداد جداول هم زیاد هست) رو توی یک DBGrid نشون بدید. اولا مطمئن بشید که اینکار بهینه و ضروری هست
در ثانی تقریبا مثل شما با Autosize کردن ستونها خیلی موافق نیستم چون ممکنه الکی جای زیادی رو در صفحه بگیره.
من کد زیر رو برای شما پیشنهاد می کنم


for i := 0 to DBGrid1.Columns.Count-1 do
begin
DBGrid1.Columns.Width := 110;
DBGrid1.Columns[i].Alignment := taLeftJustify;
end;


در حالت کاملتر


var
LastIndex: Integer;
begin
DBGrid1.Columns.Clear; [I] // Clearing All Previous DBGrid Columns
// Repeat Below code for each new Field you add to your Query (SelectList)
DBGrid1.Columns.Add;
LastIndex := DBGrid1.Columns.Count-1;
DBGrid1.Columns[LastIndex].Title.Caption := 'FieldCaption';
DBGrid1.Columns[LastIndex].Title.Alignment := taLeftJustify;
DBGrid1.Columns[LastIndex].FieldName := 'FieldName'; // Your Field Name in Query
DBGrid1.Columns[LastIndex].Width := 110; // Default width
DBGrid1.Columns[LastIndex].Alignment := taLeftJustify;
// Until Here

oghab
دوشنبه 20 آبان 1387, 09:04 صبح
سلام دوست عزیز
میخواهید ستونهای مختلفی از جداول مختلفی (که تعداد جداول هم زیاد هست) رو توی یک DBGrid نشون بدید. اولا مطمئن بشید که اینکار بهینه و ضروری هست
در ثانی تقریبا مثل شما با Autosize کردن ستونها خیلی موافق نیستم چون ممکنه الکی جای زیادی رو در صفحه بگیره.
من کد زیر رو برای شما پیشنهاد می کنم


for i := 0 to DBGrid1.Columns.Count-1 do
begin
DBGrid1.Columns[i].Width := 110;
DBGrid1.Columns[i].Alignment := taLeftJustify;
end;



]

خيلي ممنون!
راستش راه بهتري پيدا نكردم. اين دي بي گريد به يك adoquery وصله كه سرچي انجا ميده كه كاربر تعيين ميكنه ميخواد چه فيلدهايي را در نتيجه سرچش ببينه!
بازم ممنون

mortezakiaee
دوشنبه 20 آبان 1387, 11:22 صبح
ولي حالا كه ستونها مشخص نيست. دو تا مشكل دارم. يكي اينكه width هر ستون ميخوام اگه بشه حالت autowidth داشته باشه.
برای auto width تو سایت زیاد کد هست.(3نمونه رو حداقل من دیدم). میتونی مقاله همه چیز در باره dbgrid مال hismaple رو ببینی

Mask
دوشنبه 20 آبان 1387, 12:13 عصر
شما با حلقه For بزرگترین نوشته رو بدست بیارید و به اندازه نوشته ها دو تا دو تا به Width ستون DbGrid اضافه کنید مثل


var i : integer;
begin
For i := 1 To ADOQuery1.RecordCount Do
Begin
Edit2.Text := ADOQuery1.FieldByName(' Field Mored Nazar ').AsString;
If Edit1.GetTextLen < Edit2.GetTextLen Then
begin
Edit1.Text:=Edit2.Text;
DBGrid1.Columns[0].Width:=(Edit1.GetTextLen*5);
End;
ADOQuery1.Next;
End;