PDA

View Full Version : يه سوال درباره dbgrid



s_savabi
سه شنبه 01 تیر 1389, 15:11 عصر
سلام دوستان
يه سوال درباره dbgrid
فرض كنيد يك جدولم به DBGrid وصله و ستون هاي جدولم از رديف و نام و نمره تشكيل شده
ميخام زماني كه نمره 20 شده نام مربوطه در ستون نام وسط چين بشه
البته فقط براي همون ركورد
چكار بايد بكنم؟

vcldeveloper
سه شنبه 01 تیر 1389, 18:54 عصر
از طریق رویداد OnDrawColumnCell می تونید قبل از رسم هر خانه از گرید، محتوای فیلد مربوطه را بررسی کنید، و در صورت لزوم، شیوه نمایش آن را تغییر بدید (مثلا آن را وسط چین کنید).

همین عبارت OnDrawColumnCell را در سایت جستجو کنید، قبلا هم توضیح داده شده، هم مثال زده شده.

s_savabi
چهارشنبه 02 تیر 1389, 10:40 صبح
مرسي از راهنماييتون
ميدونم بايد از اين رويداد استفاده كرد اما اين رويداد يا روي كل صفات يك سطر تاثير ميذاره يا يك ستون ولي من فقط ميخام اطلاعات يك سلول وسط چين بشه،نه كل اون ستون!
توي سايت هم چيزي در اين مورد پيدا نكردم...

vcldeveloper
چهارشنبه 02 تیر 1389, 15:51 عصر
ميدونم بايد از اين رويداد استفاده كرد اما اين رويداد يا روي كل صفات يك سطر تاثير ميذاره يا يك ستون ولي من فقط ميخام اطلاعات يك سلول وسط چين بشه،نه كل اون ستون!
توي سايت هم چيزي در اين مورد پيدا نكردم...

کد زیر بهتون نشون میده که چطور باید این کار رو انجام بدید. دقت کنید که این کد کامل نیست، و حالت های مختلف رسم گرید، مثل حالت Select شدن یک خط را در نظر نمیگیره، ولی روال کلی کار به همین شکل هست.
در ضمن، برای اینکه این کد کار کنه، باید خصوصیت DefaultDrawing اون گرید را False کنید. در این کد، سوم فیلد جدول که در گرید هم به عنوان سوم ستون نمایش داده شده، به عنوان یک فیلد عددی در نظر گرفته شده، و اگر مقدار آن از 3 بیشتر باشه، متن آن Cell در وسط Cell رسم میشه، در غیر اینصورت، متن به طور عادی رسم میشه:

var
TextWidth,
TextHeight : Integer;
Text : string;
X, Y : Integer;
Value : Integer;
begin
if (DataCol = 2) then
begin
Value := TDBGrid(Sender).DataSource.DataSet.Fields[DataCol].AsInteger;
if (Value > 3) then
begin
Text := IntToStr(Value);
TextWidth := TDBGrid(Sender).Canvas.TextWidth(Text);
TextHeight := TDBGrid(Sender).Canvas.TextHeight(Text);
X := Rect.Left + ((Rect.Right - Rect.Left) div 2) - (TextWidth div 2);
Y := Rect.Top + ((Rect.Bottom - Rect.Top) div 2) - (TextHeight div 2);
TDBGrid(Sender).Canvas.FillRect(Rect);
TDBGrid(Sender).Canvas.TextOut(X,Y,Text);
end
else
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol ,Column,State);
end
else
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol ,Column,State);
end;