PDA

View Full Version : تکنیکهای کار با DBGrid



Babak-Aghili
شنبه 22 اسفند 1383, 21:57 عصر
سلام.

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

امیدوارم که مفید باشد .

راستش را بخواهید دیدم که 20-30 تا پست کرده ام ولی در نهایت خودخواهی فقط دنبال رفع اشکالات خودم بوده ام . آخه آدم چقدر میتونه مصرف کننده محض باشه . هرچیزی حدی داره ! تولید دانش !!‌ کار مهمی است .!

امضا : بچه مثبت . :wink:

Dolphin
چهارشنبه 01 تیر 1384, 11:01 صبح
چطور میشه یک سلول را کنترل کرد

abdolkamal
پنج شنبه 02 تیر 1384, 08:51 صبح
DBLookupComboBox in a DBGrid
در آدرس زیر
http://delphi.about.com/od/usedbvcl/l/aa101403a.htm

abdolkamal
پنج شنبه 02 تیر 1384, 09:01 صبح
نمایش فیلدهای Memo

http://www.swissdelphicenter.ch/torry/printcode.php?id=1713

afshar
یک شنبه 05 تیر 1384, 14:59 عصر
سلام
موقعی که من از رویداد DrawColumnCell برای رسم check box استفاده میکنم دو مشکل دارم:
1- dbgrid حالت پرش پیدا می کند.یعنی کدی که برای این رویداد نوشته شده مرتبا اجرا میشود .
2- متنی که قرار است کنار checkbox نشان داده شود، فقط وقتی که روی ستون حاوی check box کلیک شود نشان داده میشود آنهم نه در جای صحیح بلکه، در یک ستون دیگر ولی در همان سطر یک check box با آن متن نشان داده می شود.
اگر کسی دلیلش را می داند ممنون می شوم برایم بنویسد.

ye_pesare_irony
چهارشنبه 08 تیر 1384, 13:55 عصر
سلام چتور میشه درdbgrid از data base استفاده کرد

Delphi Skyline
چهارشنبه 08 تیر 1384, 16:04 عصر
سلام چتور میشه درdbgrid از data base استفاده کرد
منظورتو نمی فهمم . اما در اصل DBGRID مخصوص دیتابیس طراحی شده .
اول باید یک TDATASOURSE قرار بدی .
بعد باید خاصیت دیتاست اونو برابر با table ات بدی .
بعد باید یک dbgrid بزاری و خاصیت دیتاسورسش رو برابر با DataSource1 کنی . همین .

ye_pesare_irony
پنج شنبه 09 تیر 1384, 08:59 صبح
من همه ان کار هارو کردم وای باز هم هن جداول که بطور مثال اماده داره یا هر جدولی نمیاد(دیتابس)i

دنیای دلفی
پنج شنبه 09 تیر 1384, 10:12 صبح
هر نوع تکنیکی که ممکن است شما در خصوص Dbgrid ممکن است وجود داشته باشه درون کامپوننت DBGridEh مربوط به Ehlib گنجانده شده است . شما می توانید وارد سایت www.ehlib.com بشوید و نسخه آزمایشی آن را دریافت کنید .

اگر کسی نسخه اصلی این کامپوننت را می خواست به من PM بده :موفق:

afshar
شنبه 11 تیر 1384, 15:17 عصر
با سلام
کسی نمی دونه چرا dbgrid پرش داره؟

hyrbod
شنبه 11 تیر 1384, 15:41 عصر
با سلام
کسی نمی دونه چرا dbgrid پرش داره؟
بهتره کدی که در رویداد DrawColumnCell نوشتی رو بذاری اینجا تا بشه راجع بش نظر داد...

afshar
دوشنبه 13 تیر 1384, 09:52 صبح
سلام
کد رویداد DrawColumnCell را برایتان گذاشتم .در ضمن اگر میدانید چرا محل Checkboxرا هم اشتباه میگذارد ممنون میشوم برایم بنویسید
با تشکر

procedure Tmain.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);

const Ischecked :array[boolean] of Integer =
(DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);

var
DrawState:Integer;
DrawRect :TRect;
begin
dbgrid1.Columns[3].Width :=150;
dbgrid1.Columns[4].Width :=150;
dbgrid1.Columns[5].Width :=150;
dbgrid1.Columns[10].Width :=100;
dbgrid1.Columns[11].Width :=100;
if (gdFocused in state) then
begin
if (column.Field.FieldName= dbcheckbox1.DataField ) then
begin
DBcheckbox1.Left := rect.Left + DBGrid1.Left + 2;
Dbcheckbox1.Top := rect.Top + DBGrid1.Top + 2;
Dbcheckbox1.Width := Rect.Right - Rect.Left ;
Dbcheckbox1.Height := Rect.Bottom - Rect.Top ;

Dbcheckbox1.Visible := true;
end
end
else
begin
if (column.Field.FieldName = DBCheckbox1.DataField ) then
begin
DrawRect := Rect;
InflateRect( DrawRect,-1,-1);
Drawstate := Ischecked[column.Field.asboolean];
dbgrid1.Canvas.FillRect(Rect);
DrawFrameControl(dbgrid1.Canvas.Handle, drawRect,DFC_BUTTON, DrawState);
end;
end;
end;

M * M * A
یک شنبه 21 اسفند 1384, 18:47 عصر
سلام
کد رویداد DrawColumnCell را برایتان گذاشتم .در ضمن اگر میدانید چرا محل Checkboxرا هم اشتباه میگذارد ممنون میشوم برایم بنویسید
با تشکر

procedure Tmain.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);

const Ischecked :array[boolean] of Integer =
(DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);

var
DrawState:Integer;
DrawRect :TRect;
begin
dbgrid1.Columns[3].Width :=150;
dbgrid1.Columns[4].Width :=150;
dbgrid1.Columns[5].Width :=150;
dbgrid1.Columns[10].Width :=100;
dbgrid1.Columns[11].Width :=100;
if (gdFocused in state) then
begin
if (column.Field.FieldName= dbcheckbox1.DataField ) then
begin
DBcheckbox1.Left := rect.Left + DBGrid1.Left + 2;
Dbcheckbox1.Top := rect.Top + DBGrid1.Top + 2;
Dbcheckbox1.Width := Rect.Right - Rect.Left ;
Dbcheckbox1.Height := Rect.Bottom - Rect.Top ;

Dbcheckbox1.Visible := true;
end
end
else
begin
if (column.Field.FieldName = DBCheckbox1.DataField ) then
begin
DrawRect := Rect;
InflateRect( DrawRect,-1,-1);
Drawstate := Ischecked[column.Field.asboolean];
dbgrid1.Canvas.FillRect(Rect);
DrawFrameControl(dbgrid1.Canvas.Handle, drawRect,DFC_BUTTON, DrawState);
end;
end;
end;

با سلام
کسی بلده که dbgrid با 2 رنگ پر کنه؟
با تشکر

jafari1
یک شنبه 21 اسفند 1384, 22:03 عصر
کد زیر را در رویداد oncolumndraw بنویسید




procedure TFrmSeek.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
with (sender as tdbgrid) do
begin
if datasource.DataSet.RecNo mod 2 =0 then
canvas.Brush.Color:=$00c1ffc1
else
canvas.Brush.Color:=$009ffff;
canvas.Font.Color:=font.Color;
defaultdrawcolumncell(rect,datacol,column,state);
end;

Mahmood_M
دوشنبه 22 اسفند 1384, 00:11 صبح
چند تا از تکنیکهای مرسوم و مفید در رابطه با کار با DBGrid را جمع آوری کردم و در اینجا قرار دادم ( مثل انتخاب سطر - رنگی کردن سلولها - نمایش تصاویر و .... )

امیدوارم که مفید باشد .

دوست عزیز میشه بگید کجا گذاشتید ؟ !!!!!

merced
دوشنبه 22 اسفند 1384, 06:03 صبح
با سلام
کسی نمی دونه چرا dbgrid پرش داره؟


چپ به راست فرم یا DBGrid رو عوض کردی
تو این کد نباید DBGrid رو راست به چپ کرد

vcldeveloper
دوشنبه 22 اسفند 1384, 06:42 صبح
کد رویداد DrawColumnCell را برایتان گذاشتم .در ضمن اگر میدانید چرا محل Checkboxرا هم اشتباه میگذارد ممنون میشوم برایم بنویسید

لزومی نداره در رویداد OnColumnCell اندازه ستون ها را تغییر بدید. اگه نمی خواید اندازه ستون توسط کاربر تغییر کنه، می تونید از خصوصیات خود DbGrid استفاده کنید.
علت اینکه در زمانی که سطری انتخاب نشده متنی در ستون مربوط به DBCheckBox نمایش داده نمیشه اینه که شما کدی برای رسم متن در این رویداد نذاشتید:


DrawRect := Rect;
InflateRect( DrawRect,-1,-1);
Drawstate := Ischecked[column.Field.asboolean];
dbgrid1.Canvas.FillRect(Rect);
DrawFrameControl(dbgrid1.Canvas.Handle, drawRect,DFC_BUTTON, DrawState);

babak_delphi
سه شنبه 23 اسفند 1384, 15:58 عصر
آخرش کد زیر رو اضافه کن

DBGrid1.Drawdefaultdatacell(...)

پارامتر هاش دقیق یادم نیست

Naficy
سه شنبه 23 اسفند 1384, 19:26 عصر
خواهشا کلیه دوستان قبل از پاسخ گویی، نگاهی به تاریخ پستی که به آن پاسخ می دهند بیندازند.

ashkan2005
یک شنبه 12 فروردین 1386, 18:11 عصر
با سلام خدمت همه دوستان
از دوستان اگه کسی نحوه انتخاب سطر ی خاص از dbgrid رو می دونه به ما هم بگه تا استفاده کنیم.

Anis131313
یک شنبه 20 خرداد 1386, 07:41 صبح
من DBgridEhرا لازم دارم مشه بپرسم چه جوری میشه تهیه کنم.
ممنون میشم منو راهنمایی کنید.(البته نسخه اصلی میخوام نه آزمایشی)

mehdi_mohamadi
یک شنبه 20 خرداد 1386, 15:44 عصر
راجع به کامپوننتها با آقای کرامتی مشورت کنید.

موفق باشید.

Anis131313
پنج شنبه 31 خرداد 1386, 12:20 عصر
سلام
پیغامتون رو خوندم در مورد تهیه نسخه اصلی کامپوننت Ehlib
منو راه نمایی کنید MokhtarVerdy@yahoo.com

Cave_Man
شنبه 03 اسفند 1387, 16:46 عصر
لطفا این پست رو حذف کنید یا به بخش دلفی انتقال بدید این پست مربوط به بخش سی پی پی نیست...

mohammad_kerman65
پنج شنبه 06 مهر 1391, 08:47 صبح
با سلام و خسته نباشید.
من یه دی بی گرید دارم که فرض کنید اسم استانها در ان لیست شده و میخوام وقتی با کلیدهای جهت دار و یا موس روی هر سطر ان کلید شد در یک stringgrid لیست شهرستانهای مربوط به ان استان لیست شود.تقریبا بیشتر رویدادهای رو امتحان کردم اما نتیجه ایی نداد.
کسی میتونه من رو راهنمائی کنه لطفا
با تشکر

vcldeveloper
جمعه 07 مهر 1391, 01:16 صبح
تقریبا بیشتر رویدادهای رو امتحان کردم اما نتیجه ایی نداد.
اگر هر دو داده داخل جداول بانک اطلاعاتی هستند، برقراری ارتباط Master/Details بین شان موجب میشه این کار به طور خودکار انجام بشه.

در هر حال اگه لازم باشه خودتون همچین کاری بکنید، باید از رویدادهای Dataset متصل به گرید استفاده کنید، نه رویدادهای خودِ گرید. گرید فقط نقش نمایش دهنده اطلاعات رو بازی میکنه.

danesh1351
شنبه 08 مهر 1391, 14:27 عصر
عزیز دل برادر :
شما یک event نوشته اید که باید در مواقع ضرروی فعال بشه
اشکال کار شما اینه که Event رو کنترل نشده استفاده میکنی
در ضمن باید در موقع نوشتن کامپوننت ویرایشی در مد فارسی از راست به چپ در خصوص طریقه رسم کامپوننت یه خورده کار کنی):