# Native Code > برنامه نویسی در Delphi > بانک های اطلاعاتی در Delphi >  تکنیکهای کار با DBGrid

## Babak-Aghili

سلام.

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

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

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

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

----------


## Dolphin

چطور میشه یک سلول را کنترل کرد

----------


## abdolkamal

DBLookupComboBox in a DBGrid
در آدرس زیر
http://delphi.about.com/od/usedbvcl/l/aa101403a.htm

----------


## abdolkamal

نمایش فیلدهای Memo

http://www.swissdelphicenter.ch/torr...de.php?id=1713

----------


## afshar

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

----------


## ye_pesare_irony

سلام چتور میشه درdbgrid از data base استفاده کرد

----------


## Delphi Skyline

> سلام چتور میشه درdbgrid از data base استفاده کرد


منظورتو نمی فهمم . اما در اصل DBGRID مخصوص دیتابیس طراحی شده .
اول باید یک TDATASOURSE قرار بدی .
بعد باید خاصیت دیتاست اونو برابر با table ات بدی .
بعد باید یک dbgrid بزاری و خاصیت دیتاسورسش رو برابر با DataSource1 کنی . همین .

----------


## ye_pesare_irony

من همه ان کار هارو کردم وای باز هم هن جداول که بطور مثال اماده داره یا هر جدولی نمیاد(دیتابس)i

----------


## دنیای دلفی

هر نوع تکنیکی که ممکن است شما در خصوص Dbgrid ممکن است وجود داشته باشه درون کامپوننت DBGridEh مربوط به Ehlib گنجانده شده است . شما می توانید وارد سایت www.ehlib.com بشوید و نسخه آزمایشی آن را دریافت کنید .

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

----------


## afshar

با سلام
کسی نمی دونه چرا dbgrid پرش داره؟

----------


## hyrbod

> با سلام
> کسی نمی دونه چرا dbgrid پرش داره؟


بهتره کدی که در رویداد DrawColumnCell نوشتی رو بذاری اینجا تا بشه راجع بش نظر داد...

----------


## afshar

سلام
کد رویداد DrawColumnCell را برایتان گذاشتم .در ضمن اگر میدانید چرا محل Checkboxرا هم اشتباه میگذارد ممنون میشوم برایم بنویسید
با تشکر
procedure Tmain.DBGrid1DrawColumnCell&#40;Sender&#58; TObject; const Rect&#58; TRect;
  DataCol&#58; Integer; Column&#58; TColumn; State&#58; TGridDrawState&#41;;

const Ischecked &#58;array&#91;boolean&#93; of Integer =
    &#40;DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED&#41;;

var
    DrawState&#58;Integer;
    DrawRect &#58;TRect;
begin
    dbgrid1.Columns&#91;3&#93;.Width &#58;=150;
    dbgrid1.Columns&#91;4&#93;.Width &#58;=150;
    dbgrid1.Columns&#91;5&#93;.Width &#58;=150;
    dbgrid1.Columns&#91;10&#93;.Width &#58;=100;
    dbgrid1.Columns&#91;11&#93;.Width &#58;=100;
    if &#40;gdFocused in state&#41; then
    begin
      if &#40;column.Field.FieldName= dbcheckbox1.DataField &#41; then
      begin
        DBcheckbox1.Left &#58;= rect.Left + DBGrid1.Left + 2;
        Dbcheckbox1.Top &#58;= rect.Top + DBGrid1.Top + 2;
        Dbcheckbox1.Width &#58;= Rect.Right - Rect.Left ;
        Dbcheckbox1.Height &#58;= Rect.Bottom - Rect.Top ;

        Dbcheckbox1.Visible &#58;= true;
      end
    end
    else
    begin
      if &#40;column.Field.FieldName = DBCheckbox1.DataField &#41; then
      begin
        DrawRect &#58;= Rect;
        InflateRect&#40; DrawRect,-1,-1&#41;;
        Drawstate &#58;= Ischecked&#91;column.Field.asboolean&#93;;
        dbgrid1.Canvas.FillRect&#40;Rect&#41;;
        DrawFrameControl&#40;dbgrid1.Canvas.Handle, drawRect,DFC_BUTTON, DrawState&#41;;
      end;
    end;
end;

----------


## M * M * A

> سلام
> کد رویداد 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);
> 
> ...


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

----------


## jafari1

کد زیر را در رویداد 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

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


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

----------


## merced

> با سلام
> کسی نمی دونه چرا dbgrid پرش داره؟



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

----------


## vcldeveloper

> کد رویداد 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

آخرش کد زیر رو اضافه کن
DBGrid1.Drawdefaultdatacell(...)

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

----------


## Naficy

خواهشا کلیه دوستان قبل از پاسخ گویی، نگاهی به تاریخ پستی که به آن پاسخ می دهند بیندازند.

----------


## ashkan2005

با سلام خدمت همه دوستان 
از دوستان اگه کسی نحوه انتخاب سطر ی خاص از dbgrid رو می دونه به ما هم بگه تا استفاده کنیم.

----------


## Anis131313

من DBgridEhرا لازم دارم مشه بپرسم چه جوری میشه تهیه کنم.
ممنون میشم منو راهنمایی کنید.(البته نسخه اصلی میخوام نه آزمایشی)

----------


## mehdi_mohamadi

راجع به کامپوننتها با آقای کرامتی مشورت کنید.

موفق باشید.

----------


## Anis131313

سلام
پیغامتون رو خوندم در مورد تهیه نسخه اصلی کامپوننت *Ehlib*
منو راه نمایی کنید MokhtarVerdy@yahoo.com

----------


## Cave_Man

لطفا این پست رو حذف کنید یا به بخش دلفی انتقال بدید این پست مربوط به بخش سی پی پی نیست...

----------


## mohammad_kerman65

با سلام و خسته نباشید.
من یه دی بی گرید دارم که فرض کنید اسم استانها در ان لیست شده و میخوام وقتی با کلیدهای جهت دار و یا موس روی هر سطر ان کلید شد در یک stringgrid لیست شهرستانهای مربوط به ان استان لیست شود.تقریبا بیشتر رویدادهای رو امتحان کردم اما نتیجه ایی نداد.
کسی میتونه من رو راهنمائی کنه لطفا
با تشکر

----------


## vcldeveloper

> تقریبا بیشتر رویدادهای رو امتحان کردم اما نتیجه ایی نداد.


اگر هر دو داده داخل جداول بانک اطلاعاتی هستند، برقراری ارتباط Master/Details بین شان موجب میشه این کار به طور خودکار انجام بشه.

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

----------


## danesh1351

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

----------

