ورود

View Full Version : 2 تا سوال در مورد dbgride



shaghayegh_6113
دوشنبه 11 اردیبهشت 1385, 21:07 عصر
سلام
اگر به سوالات من خیلی فوری جواب بدید ممنون می شم .
اول اینکه چه طور می تونم توی title یه dbgride یه آیکون بندازم که با انتخاب اون آیکن یه کاری مثل مثلا sort ستون مربوطه رو انجام بده ؟؟(فقط توی title منظورمه نه جای دیگه)

دوم اینکه وقتی جواب یه sql procedure شامل 2 تا gride مجزاست چه طوری با dbgride توی فرمم میتونم بین هردوتای این grid ها پیمایش کنم ؟؟


ممنون

ghabil
دوشنبه 11 اردیبهشت 1385, 23:47 عصر
ببین آیکون گذاشتن تو تایتل Column داستان داره ، مگه اینکه از کامپوننت استفاده کنی . ولی مثلا میتونی بغل تایتلت یک علامت بزای مثلا /\ و \/ برای سورت نزولی و صعودی اگر میخوای رو تایتل کلیک کنی خب از Event OnTitleClick استفاده کن یک فلگ هم بگیر که یک دفعه صعودی بشه یک دفعه نزولی .
برای سورت هم دوتا راه داری یا Query ت رو عوض کنی یا اینکه روی دیتاستت ایندکس بزاری و ایندکسرو متناسب با Columnی که کلیک شده تغییر بدی که کاملا منطقی تره روش دوم .

اما اگر هنوز اصرار داری که عکس بزاری یک کلک میتونی بزنی :
یک TImage بساز بعد Parrentش رو بکن DBGridet بعد هم Top و Left ش رو طوری بزار که قشنگ بره روی تایتل کالمنی که میخوای یک OnClick هم براش بنویس هر کاری میخوای بکنه .
(فقط حواست به Anchorها و عوض شدن اندازه صفحه باشه دیگه) غیر از این فکر میکنم تنها راهت اینه که یک کامپونت از رو گرید درایو کنی بعد DrawCellش رو Override کنی که رو کانواسش ایکونتو بکشه...


دوما رو هم بااینکه چند بار خوندم اصلا متوجه نشدم میخوای چی کار کنی!

m-khorsandi
چهارشنبه 13 اردیبهشت 1385, 11:17 صبح
اول: هر تاپیک برای مطرح کردن یک سئوال هست.
دوم: از کد زیر میتونی برای رسم کردن یک تصویر(فرضا" فلش) روی عنوان DBGrid استفاده کنید،
نیاز به کد بیشتری هست برای اینکه شکل رو در کنار فیلد مربوطه بکشی، در هر صورت این کد
که میبایست در OnDrawColumnCell بنویسی کار رو انجام میده:


// DBGrid.Canvas, Canvas x, Cancas y, Image Index
ImageList1.Draw(DBGrid1.Canvas, 50, 0, 2);


سوم: به نتیجه ای که از یک Stored Procedure یا Query برمیگرده RecordSet میگن
(... * Select)، برای حرکت بین RecordSet میتونید از NextRecordset استفاده کنید.

shaghayegh_6113
پنج شنبه 14 اردیبهشت 1385, 05:18 صبح
سلام
آقای خرسندی از بابت جواباتون ممنون
در مورد جواب سومتون من منظورم Record set نیست.منظورم 2 تا grid مجزا یا بیشتره(مثلا توی Sql سه تا select رو بدون union کردن پشت هم بنویسی) که Dbgrid در این حالت همیشه روی grid اول پیمایش میکنه و Record set هاشو بر میگردونه .
من می خوام که توی grid های بعدی هم بتونه پیمایش کنه .

vcldeveloper
پنج شنبه 14 اردیبهشت 1385, 07:43 صبح
type
THackedGrid = class(TDBGrid);
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
R : TRect;
Pic : TPicture;
i : integer;
begin
with Sender as TDBGrid do
begin
//Draw the image on the third colum
if DataCol = 2 then
begin
Pic := TPicture.Create;
try
pic.Assign(Image1.Picture); //--> Create your own image!
R.TopLeft := Point(0,0);
R.Bottom := THackedGrid(DBGrid1).RowHeights[0];
//Calculate the picture's Left value
for i := 0 to DataCol-1 do
Inc(R.Left,Columns[i].Width);
//The picture must be drawn after the column's title
Inc(R.Left,Canvas.TextWidth(Column.Title.Caption) + 8);
R.Right := Pic.Width + R.Left;
//Draw the picture
Canvas.StretchDraw(R,Pic.Graphic);
finally
Pic.Free;
end;
end; //if DataCol
DefaultDrawColumnCell(Rect,DataCol,Column,State);
end; //With
end;

m-khorsandi
شنبه 16 اردیبهشت 1385, 08:56 صبح
من می خوام که توی grid های بعدی هم بتونه پیمایش کنه .

من هنوز هم متوجه منظورتون نشدم :متفکر: