صفحه 1 از 3 123 آخرآخر
نمایش نتایج 1 تا 40 از 89

نام تاپیک: همه چیز در مورد DBGrid

  1. #1

    همه چیز در مورد DBGrid

    سلام؛


    همونطور که میدونید DBGrid عنصریه که کم و بیش در همه برنامه های بانک اطلاعاتی باهاش سر و کار داریم و یکی از اجزاییه که خیلی سوالا در موردش مطرح میشه و تو این سایتم میبینیم که همیشه سوالاتی در مورد این کنترل پرکاربرد مطرح میشه.

    تصمیم داریم در این تاپیک منحصرا به بحث در مورد انواع ویژگی ها و ترفندهای DBGrid بپردازیم.

    از دوستان عزیز خواهشمندم هر گونه کد یا ترفند و هرگونه اطلاعاتی که در مورد DBGrid دارند رو در این تاپیک قرار بدن.

    فقط بازم میگم این تاپیک منحصرا در مورد این کنترل بحث میکنه و اگه دیگه چیزی باقی نموند بعدا به Grid های دیگه میپردازیم.


    برای اولین پست هم از پایه DBGrid شروع میکنم :

    .................................................. ........................

    TDBGrid یکی از عناصر دیتا کنترله که اطلاعات یک منبع رو بصورت جدولی نشون میده. این اطلاعات میتونه اطلاعات یه Table، اطلاعات حاصل از یه SQL و با یه Stored Procedure باشه. توی این عنصر ستونها مطابق فیلدها و سطرها منطبق بر رکوردها هست. خاصیت DataSource این عنصر رو به منبع داده متصل میکنه و با Active شدن دیتاست، میتونیم اطلاعات رو ببینیم. تقریبا 3 عامل بر نمایش رکوردها در یک عنصر Grid تاثیر داره :

    1- وجود ستونهای ثابت تعریف شده برای یک Grid با استفاده از ویرایشگر ستونها.
    2- ایجاد فیلد ثابت برای مجموعه داده نمایش شده.
    3- خاصیت ObjectView از دیتاست برای گریدهایی که فیلدهای آرایه ای رو نشون میدن.


    یک کنترل گرید، خاصیتی بنام Columns دارد که از نوع TDBGridColumns می باشد. TDBGridColumns خود یک مجموعه از TColumn هست که تمام ستون های یه کنترل Grid رو نشون میده. در زمان طراحی میتونبید خواص ستونها رو همونطوری که میخواهید تنظیم کنید. یا از خاصیت Columns جهت دستیابی به خاصیتها، رویدادها و متدهای TDBGridColumns در Run-Time استفاده کنید.


    خاصیت State از خاصیت Columns برای یک Grid، وجود ستونهای ثابت را مشخص میکنه (DBGrid.Columns.State). این خاصیت یک خاصیت زمان اجراست و مقدار پیش فرض اون CSDefault هست به معنی عدم وجود ستونهای ثابت. در این حالت نحوه نمایش رکوردها توسط خاصییت فیلدها در دیتاست ما مشخص میشه و ربطی به DBGrid نداره. ستونها بصورت دینامیک مطابق فیلدهای قابل نمایش Dataset ما ایجاد میشن و ترتیب ستونها در گرید هم مطابق با ترتیب فیلدها در Dataset هست. کنترل DBGrid بصورت دینامیک و پویا عمل میکنه و میتونیم در هر لحظه اطلاعات رو نشون بدیم. مثلا در یک لحظه اون رو به یه Table وصل کنیم و لحظه ای بعد اون رو به یه Query و لحظه ای دیگه به یه Stored Procedure.


    خواص ستونهای پویا فقط تا زمانی وجود دارند که یک ستون با یک فیلد خاص مرتبط باشد. مثلا تغییر خاصیت Width یک ستون، مقدار خاصیت Display Width یک فیلد مرتبط با اون ستون رو عوض میکنه.


    وقتی ستونهای ثابت تعریف میکنید اونا خواص خودشون رو از فیلدهای مرتبط بدست میارن مگر اینکه شما خودتون خواص ستونا رو طوری که میخواهید تغییر بدید. مثلا عنوان یک ستون متغیره ولی اگه عنوان یه ستون رو مقداردهی کنید دیگه اون عنوان ستون به خاصیت Display Label فیلد شما در Dataset وابسته نیست.


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


    چون لازم نیست ستونهای ثابت حتما به یه فیلد متصل باشند و چون چندین ستون میتونه به یه فیلد وصل بشه، خاصیت FieldCount یک Grid میتونه کوچکتر یا مساوی با تعداد ستونهای Grid شما باشه. همچنین اگه ستون انتخاب شده به هیچ فیلدی مرتبط نباشه خاصیت SelectedField در اینجا Null و خاصیت SelectedIndex برابر با 1- خواهد بود.


    در پست بعد ادامه می دیم.....
    آخرین ویرایش به وسیله Hsimple11 : چهارشنبه 30 مرداد 1387 در 18:05 عصر


  2. #2

    نقل قول: همه چیز در مورد DBGrid

    قبل از ادامه بحث قبل مقاله ای کلی در مورد رنگ کردن DBGrid که قبلا در سایت وجود داشت :

    رنگ کردن DBGrid

  3. #3

    نقل قول: همه چیز در مورد DBGrid

    به ادامه خواص کلی DBGrid می پردازیم :


    مشخص کردن منبع یک ستون

    در زمان اجرا شما میتونید خاصیت AssignedValues یک ستون بفهمید که آیا یک ستون DBGrid مقدارش رو از یک فیلد بدست میاره یا نه :

    DBGrid1.Columns[0].AssignedValues


    این خصوصیت که از نوع TColumnValue است Caption، رنگ، فونت و سایر ویژگیهای یک ستون را به ما میدهد. میتونیم تمام این خواص یک ستون رو با RestoreDefaults بصورت پیش فرض و اولیه در بیاوریم.


    ایجاد ستونهای ثابت (fixed)

    برای Customize کردن یک گرید در زمان طراحی برنامتون، باید ستونها رو ویرایش کنیم. برای اینکار از ویرایشگر ستونها استفاده میکنیم. دوبار بر روی خاصیت Columns یا خود DBGrid کلیک میکنیم تا ویرایشگر ستونها نشان داده شود. کلید Add را در ویرایشگر ستونها فشار دهید. یک ستون جدید ایجاد میشود. خاصیت FieldName را به فیلدی که میخواهید این ستون به اون وصل شه مقدار دهی میکنیم. Titlle و Caption ستون را تغییر داده و ویرایشگر را جهت ثبت تغییرات می بندیم.

    برای جابجایی ستونها هم در همین ویرایشگر ستونها، ستونها رو به دلخواه جابجا میکنیم.


    تعریف ستونهای جستجو

    اگر میخواهید ستونی یک لیست را از جدولی دیگه نشون بده، ابتدا باید یک فیلد جستجو تعریف کنید. بعد خاصیت FieldName را از ستون مورد نظر به اون فیلد جستجو مقداردهی کنید و خاصیت ButtonStyle را cbsAuto قرار دهید. هرگاه اون ستون انتخاب شود، یک لیست که محتویات آن از جدول جستجو می باشد نشان داده می شود.


    در پست بعد ادامه میدیم...

  4. #4

    نقل قول: همه چیز در مورد DBGrid

    دوستان اگه همکاری نکنند این تاپیک ، تاپیک جامعی نمیشه....

  5. #5

    نقل قول: همه چیز در مورد DBGrid

    دوست و استاد عزیز میخواستم بپرسم اگه بخام نام ستونهارو مثل datagridview فارسی کنم بدون آنکه تو اصل موضوع تغییر نکنه یعنی نام فیلدها تغییر نکنه چکار کنم
    با تشکر

  6. #6

    نقل قول: همه چیز در مورد DBGrid

    نقل قول نوشته شده توسط war1351 مشاهده تاپیک
    دوست و استاد عزیز میخواستم بپرسم اگه بخام نام ستونهارو مثل datagridview فارسی کنم بدون آنکه تو اصل موضوع تغییر نکنه یعنی نام فیلدها تغییر نکنه چکار کنم
    با تشکر
    اگه منظورتون فقط عنوان ستونهاست در Column Editor، خاصیت Title ستون مربوطه را تغییر دهید. Title فقط نام ظاهری ستون شماست.

  7. #7

    نقل قول: همه چیز در مورد DBGrid

    اگر بخواهیم زبانی غیر از فارسی و انگلیسی مثل چینی نمایش دهیم چه باید بکنیم من این سوال به عنوان یک تاپیک مطرح کردم لطفا راهنمایی کنید فونت و زبان ویندوز را نیز تغییر دادم ولی بازم نتیجه نگرفتم اطلاعات ستون مورد نظر به صورت ؟ نمایش داده می شود.
    قسمت language for none unicode را نیز تغییر دادم ولی بازم نشد

  8. #8

    نقل قول: همه چیز در مورد DBGrid

    نقل قول نوشته شده توسط tvg77 مشاهده تاپیک
    اگر بخواهیم زبانی غیر از فارسی و انگلیسی مثل چینی نمایش دهیم چه باید بکنیم من این سوال به عنوان یک تاپیک مطرح کردم لطفا راهنمایی کنید فونت و زبان ویندوز را نیز تغییر دادم ولی بازم نتیجه نگرفتم اطلاعات ستون مورد نظر به صورت ؟ نمایش داده می شود.
    قسمت language for none unicode را نیز تغییر دادم ولی بازم نشد
    این ستون مورد نظر چه نوع داده ای دارد؟

    بعلاوه در سایت کلماتی نظیر -عدم نمایش- حروف به هم ریخته- بانک- را جستجو کنید. Character Set فونت شما در گرید، در پایگاه Collation و تنظیمات ویندوز همه در این امر تاثیر دارند. همه را چک کنید.

  9. #9

    نقل قول: همه چیز در مورد DBGrid

    سلام
    با اجازه منم یه چیزی اضافه میکنم ... خیلیها معمولا سوال می کنن ...
    اضافه کردن CheckBox یا Edit و ... در DbGrid

    در این لینک آقای کرامتی به صورت کامل توضیح دادن دستشون درد نکنه ...
    How to put components into a cell on a TDBGrid
    https://barnamenevis.org/showthread.php?t=1354
    خواستن ، توانتستن است !!!

  10. #10
    کاربر دائمی
    تاریخ عضویت
    آبان 1386
    محل زندگی
    تهران
    پست
    159

    نقل قول: همه چیز در مورد DBGrid

    در مورد مرتب کردن(sort) ستون های یه DBGrid زیاد بحث شده این یه نمونه خوب برای سورت با کلیک بر روی عنوان ستون

    procedure Tmain_frm.DBGrid1TitleClick(Column: TColumn);
    var i: integer;
    begin
    if (Column.Title.Font.Style = [fsbold]) and (Column.Title.Font.Color = clWindowText)then begin
    TADOQuery(Column.Grid.DataSource.DataSet).Sort:='['+Column.FieldName+']'+' DESC' ;
    for i:=0 to TDBGrid(Column.Grid).Columns.Count-1 do begin
    TDBGrid(Column.Grid).Columns[i].Title.Font.Style:=[];
    TDBGrid(Column.Grid).Columns[i].Title.Font.Color:= clWindowText; end;
    Column.Title.Font.Style:=[fsbold];
    Column.Title.Font.Color:= clred; end
    else begin
    TADOQuery(Column.Grid.DataSource.DataSet).Sort:='['+Column.FieldName+']' ;
    for i:=0 to TDBGrid(Column.Grid).Columns.Count-1 do begin
    TDBGrid(Column.Grid).Columns[i].Title.Font.Style:=[];
    TDBGrid(Column.Grid).Columns[i].Title.Font.Color:= clWindowText; end;
    Column.Title.Font.Style:=[fsbold]; end;
    end;


    پ.ن. اگه بشه یه جوری این کد رو تغییر بدیم که یه فلش هم نشون بده عالی میشه

  11. #11

    نقل قول: همه چیز در مورد DBGrid

    با سلام و خسته نباشید.
    در این پست ادامه مبحث مربوط به DBGrid رو ادامه میدیم.


    تعریف ستون های لیستی

    اگر میخواهید ستونی یک لیست ثابت رو نشون بدهو مقادیر اون از داخل یک لیست قابل انتخاب باشه (مثل یه ComboBox) مراحل زیر را انجام دهید :


    1- ستون مورد نظر را از لیست ستون ها انتخاب کنید (ColumnEditor)
    2- خاصیت ButtonStyle ستون رو cbsAuto قرار بدید.
    3- بر روی خاصیت PickList در Object Inspector دوبار کلیک کنید. مقادیری را که میخواهید در ستون مورد نظر قابل انتخاب کردن باشند را در اینجا وارد کنید.


    تعریف ستونهای کلیدی

    یک ستون میتونه علامت (...) رو در قالب یک دکمه در سمت راست خودش نشون بده تا کاربر با کلیک بر روی اون و یا با Ctrl+Enter بتونه اطلاعات بیشتری راجع به اون فیلد ببینه. مثلا فرض کنید فیلد شما حاوی تصاویر است. میتونید ستون مرتبط با این فیلد رو به این صورت تعریف کنید تا هنگام انتخاب اون، یه فرم که تصویر انتخاب شده را نشون میده فعال شده و کاربر بتونه تصویر و یا توضیحات خاصی رو ببینه. برای ایجاد چنین ستونی مراحل زیر را باید انجام دهید :


    1- ستون مورد نظر را انتخاب کنید. (در ویرایشگر ستونها)
    2- خاصیت ButtonStyle را cbsEllipsis قرار دهید.
    3- کد مربوط به کار مورد نظر خودتون رو (مثلا نمایش یه فرم دیگه یا توضیحات خاص یا...) در رویداد OnEditButtonClick مربوط به DBGrid بنویسید.


    DBGrid Options

    این خاصیت رو در Object Inspector برای یک عنصر DBGrid میبینید. که شامل گزینه های ذیل است :


    DgEditing

    True : وقتی یک فیلد انتخاب می شوند در مد ویرایش باشد.
    False : وقتی یک فیلد انتخاب می شود بصورت پیش فرض در مد ویرایش نباشد.


    DgAlwaysShowEditor

    True : تمام فیلدهای انتخاب شده همواره در حالت ویرایش باشند.
    False : که بصورت پیش فرض فعال است و فیلد همواره با کلیک بر روی آن در مد ویرایش نیست.


    DgTitles

    True : نام فیلدها در بالای گرید نمایش داده شود.
    False : نام فیلدها در بالای گرید نمایش داده نشود.


    DgIndicator

    True : یک علامت اشاره در سمت چپ گرید نمایش داده می شود که رکورد انتخاب شده را نشان می دهد.
    False : ایم علامت اشاره را نشان ندهد.


    DgColumnResize

    True : ستونها در زمان اجرا توسط کاربر قابل تغییر سایز باشند.
    False : ستونها این قابلیت رو نداشته باشند.


    DgCollines

    True : خطهای جدا کننده ستونها را نشان دهد.


    DgRowLines

    True : خط های بین سطر ها را نشان دهد.


    DgTabs

    True : با کلید Tab میتوان بیت ستونها حرکت کرد.
    False : فشردن Tab باعث خارج شدن فوکوس از گرید می شود.


    DgRowSelect

    True : با انتخاب یه فیلد، تمام فیلدهای رکورد انتخاب می شوند.
    False : انتخاب یک فیلد فقط همان فیلد را انتخاب میکند.


    DgAlwaysShowSelection

    True : رکورد انتخاب شده همیشه نشان داده شود. حتی اگر فوکوس بر روی کنترل دیگری باشد.
    False : رکورد انتخاب شده وقتی بصورت پررنگ است که Focus بر روی DBGrid باشد.


    DgConfirmDelete

    True : اگر کاربر بخواهد رکوردی را حذف کند (Ctrl+Del) یک پیغام نمایش داده شود.


    DgCancelOnExit

    True : اگر رکوردی را Insert کنید و بدون ثبت آن از گرید خارج شوید، این رکورد ثبت نمی شود.
    False : رکورد Insert شده به هنگام خروج ثبت می شود.


    DgMultiSelect

    True : به کاربر اجازه می دهد که چندین رکورد را با هم انتخاب کند.



    امیدوارم این تاپیک کم کم تاپیک کاملی بشه.
    در پست بعد ادامه میدیم....

  12. #12
    کاربر دائمی آواتار ariobarzan
    تاریخ عضویت
    تیر 1386
    محل زندگی
    ايران زمين
    پست
    413

    نقل قول: همه چیز در مورد DBGrid

    با تشكر خيلي زياد از زحمتي كه كشيديد و اين تاپيك رو ايجاد كرديد.
    شايد يه موضوع كه خيلي از دوستان باهاش برخورد داشتند اين بوده كه چطور ميشه طول يك ستون در ديبي گريد را با توجه به اندازه طول بزرگترين مقدار فيلد در ديتا بيس بطور اتوماتيك تنظيم كرد؟
    مثلا فرض كنيم فيلدي حاوي آدرس افراد باشه كه اندازه اون هم طبيعتا براي هر ركورد متغيره
    حالا ميخواهيم ستون فيلد آدرس بر اساس اندازه بزرگترين آدرس تنظيم بشه جوري كه همه آدرس ها كامل ديده بشوند .
    لطفا راهنمايي كنيد.
    باز هم تشكر

  13. #13

    نقل قول: همه چیز در مورد DBGrid

    چطور ميشه طول يك ستون در ديبي گريد را با توجه به اندازه طول بزرگترين مقدار فيلد در ديتا بيس بطور اتوماتيك تنظيم كرد؟
    البته این راه حل منطقی نیست. اما میتونید از خاصیت Canvas.TextWidth گرید خود استفاده کنید و با چند حلقه طولانی ترین رکورد را در فیلد بدست بیاورید و بعد عرض ستون را مطابق آن تنظیم کنید :

    procedure SetGridColumnWidths(Grid: Tdbgrid);
    const
    DEFBORDER = 10;
    var
    temp, n: Integer;
    lmax: array [0..30] of Integer;
    begin
    with Grid do
    begin
    Canvas.Font := Font;
    for n := 0 to Columns.Count - 1 do
    lmax[n] := Canvas.TextWidth(Fields[n].FieldName) + DEFBORDER;
    grid.DataSource.DataSet.First;
    while not grid.DataSource.DataSet.EOF do
    begin
    for n := 0 to Columns.Count - 1 do
    begin
    temp := Canvas.TextWidth(trim(Columns[n].Field.DisplayText))
    + DEFBORDER;
    if temp > lmax[n] then lmax[n] := temp;
    end; {for}
    grid.DataSource.DataSet.Next;
    end;
    grid.DataSource.DataSet.First;
    for n := 0 to Columns.Count - 1 do
    if lmax[n] > 0 then
    Columns[n].Width := lmax[n];
    end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    SetGridColumnWidths(DBGrid1);
    end;



    این دو لینک را در مورد AutoSize کردن ستونهای DBGRID ببینید :

    1
    2

  14. #14
    کاربر دائمی آواتار nasr
    تاریخ عضویت
    آذر 1382
    محل زندگی
    هر کجا هستم باشم آسمان مال من است پنجره فکر هوا عشق زمین مال من است
    پست
    2,009

    نقل قول: همه چیز در مورد DBGrid

    نقل قول نوشته شده توسط mortezakiaee مشاهده تاپیک
    در مورد مرتب کردن(sort) ستون های یه DBGrid زیاد بحث شده این یه نمونه خوب برای سورت با کلیک بر روی عنوان ستون

    procedure Tmain_frm.DBGrid1TitleClick(Column: TColumn);
    var i: integer;
    begin
    if (Column.Title.Font.Style = [fsbold]) and (Column.Title.Font.Color = clWindowText)then begin
    TADOQuery(Column.Grid.DataSource.DataSet).Sort:='['+Column.FieldName+']'+' DESC' ;
    for i:=0 to TDBGrid(Column.Grid).Columns.Count-1 do begin
    TDBGrid(Column.Grid).Columns[i].Title.Font.Style:=[];
    TDBGrid(Column.Grid).Columns[i].Title.Font.Color:= clWindowText; end;
    Column.Title.Font.Style:=[fsbold];
    Column.Title.Font.Color:= clred; end
    else begin
    TADOQuery(Column.Grid.DataSource.DataSet).Sort:='['+Column.FieldName+']' ;
    for i:=0 to TDBGrid(Column.Grid).Columns.Count-1 do begin
    TDBGrid(Column.Grid).Columns[i].Title.Font.Style:=[];
    TDBGrid(Column.Grid).Columns[i].Title.Font.Color:= clWindowText; end;
    Column.Title.Font.Style:=[fsbold]; end;
    end;
    پ.ن. اگه بشه یه جوری این کد رو تغییر بدیم که یه فلش هم نشون بده عالی میشه



    با این کد

    if DBGrid1.DataSource.DataSet is TCustomADODataSet then
    with TCustomADODataSet(DBGrid1.DataSource.DataSet) do
    begin
    try
    DBGrid1.Columns[PreviousColumnIndex].title.Font.Style :=
    DBGrid1.Columns[PreviousColumnIndex].title.Font.Style - [fsBold];
    except
    end;

    Column.title.Font.Style :=
    Column.title.Font.Style + [fsBold];
    PreviousColumnIndex := Column.Index;

    if (Pos(Column.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort)= 0) then
    Sort := Column.Field.FieldName + ' DESC'
    else
    Sort := Column.Field.FieldName + ' ASC';
    end; }




    و این کد هم میشه


    if Column.Title.Font.Color = clRed then
    begin
    TCustomADODataSet(DBGrid1.DataSource.DataSet).Sort := Column.Field.FieldName + ' ASC';
    Column.Title.Font.Color := clBlack;
    end else
    begin
    TCustomADODataSet(DBGrid1.DataSource.DataSet).Sort := Column.Field.FieldName + ' DESC';
    Column.Title.Font.Color := clRed;
    end;


  15. #15

    نقل قول: همه چیز در مورد DBGrid

    با اجازه بزرگترها من یه پیشنهاد دارم.
    اول اینکه این تاپیک رو در قسمت اعلان ها قرار بدید تا همیشه در دسترس باشه
    دوم اینکه هر کدوم از دوستا قبلا خودشون در باره این موضوع سوال کردند و یا جواب سوالی را دادند ، آدرس اون تاپیک رو هم بذارن
    و سوم اینکه در مورد طریقه های مختلف رنگی کردن سطرهای DBGrid هم توضیح بدید.

  16. #16

    نقل قول: همه چیز در مورد DBGrid

    نقل قول نوشته شده توسط hadisalahi2 مشاهده تاپیک
    اول اینکه این تاپیک رو در قسمت اعلان ها قرار بدید تا همیشه در دسترس باشه
    دوم اینکه هر کدوم از دوستا قبلا خودشون در باره این موضوع سوال کردند و یا جواب سوالی را دادند ، آدرس اون تاپیک رو هم بذارن
    و سوم اینکه در مورد طریقه های مختلف رنگی کردن سطرهای DBGrid هم توضیح بدید.
    مرسی از پیشنهادهای شما.

    در مورد اول هنوز این تاپیک کامل نشده و خیلی مونده تا نسبتا مرجع بشه.

    در مورد دوم، بله من هم امیدوارم!

    و د رمورد رنگ کردن در همین تاپیک مقاله ای با عنوان رنگ کردن DBGRID قرار داده ام. اگر مشکلی بود بفرمایید.

  17. #17
    کاربر دائمی آواتار nasr
    تاریخ عضویت
    آذر 1382
    محل زندگی
    هر کجا هستم باشم آسمان مال من است پنجره فکر هوا عشق زمین مال من است
    پست
    2,009

    نقل قول: همه چیز در مورد DBGrid

    این برای رنگی کردن رکوردها است


    procedure TFormAnbar.DBGrid4DrawColumnCell(Sender: TObject;
    const Rect: TRect; DataCol: Integer; Column: TColumn;
    State: TGridDrawState);
    begin
    if Rangi <> true then
    Exit;

    if not (gdSelected in state) then
    begin
    if (TBScanerDetail.FieldByName('Quality2').AsInteger) = 0 then
    Color := clWindow; //RGB(224, 231, 223) //a color
    if (TBScanerDetail.FieldByName('Quality2').AsInteger) = 1 then
    Color := $006464FF; //RGB(224, 231, 223) //a color
    if (TBScanerDetail.FieldByName('Quality2').AsInteger) = 2 then
    Color := $0051FF51; //RGB(224, 231, 223) //a color
    if (TBScanerDetail.FieldByName('Quality2').AsInteger) = 3 then
    Color := $0080FFFF; //RGB(224, 231, 223) //a color
    if (TBScanerDetail.FieldByName('Quality2').AsInteger) = 4 then
    Color := $00F59D96; //RGB(224, 231, 223) //a color
    if (TBScanerDetail.FieldByName('Quality2').AsInteger) = 5 then
    Color := $002D7DF7; //RGB(224, 231, 223) //a color

    Dbgrid4.Canvas.Brush.Color := Color;
    Dbgrid4.Canvas.FillRect(Rect);
    end;
    DBGrid4.DefaultDrawColumnCell(Rect, DataCol, Column, State);

    end;

  18. #18

    نقل قول: همه چیز در مورد DBGrid

    امروز متاسفانه زیاد وقت ندارم بخاطر پست کوتاهم عذرخواهی میکنم.


    ویرایش در گرید

    اگر بخواهیم در زمان اجرا داده های گریدمون رو ویرایش کنیم یا رکورد جدید ایجاد کنیم باید 2 شرط زیر برقرار باشه :

    1- خاصیت CanModify از DataSet برابر با True باشد.
    2- خاصیت ReadOnly از گرید، False باشه.

    وقتی کاربر داده های یک رکورد رو ویرایش میکنه ، این تغییرات در یک بافر لوکال ذخیره میشه و اگر کاربر به رکورد بعدی بره، اونوقت این تغییرات در دیتاست شما ثبت میشه که اگه کلید Esc رو بزنید از تغییرات صرفنظر خواهد شد. اگر هم موقع بروزرسانی داده ها مشکلی پیش بیاد، مثلا محتولی یک فیلد بزرگتر از سایز اون در دیتاست باشه، اونوقت دلفی به شما پیغام خطا میده.


    در پست بعد ادامه میدیم....

  19. #19

    نقل قول: همه چیز در مورد DBGrid

    آقای حامد خان من مقاله رنگی کردن سطرها رو خوندم .
    حالا اگه من بخوام سطرهای من به صورت یک درمیان رنگ بشوند باید چی کار کنم.
    مثل GRidView که در ASP.Net وجود داره.
    ممنون از لطفتون
    یا حق

  20. #20

    نقل قول: همه چیز در مورد DBGrid

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

    رنگ / سطر / Custom Row / و ... میتونن Keyword های شما باشند.

  21. #21

    نقل قول: همه چیز در مورد DBGrid

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

  22. #22

    نقل قول: همه چیز در مورد DBGrid

    من توی سایت به حالتهای مختلف و با کلمات کلید گوناگون جستجو کردم ولی متاسفانه چیزی که در مورد رنگی کردن یک در میان رکورد ها نوشته شده باشه پیدا نکردم.
    آقا هادی خان! باید در هر جستجو کلمات کلیدی خودتون رو پیدا کنید.

    http://www.barnamenevis.org/sh...B3%D8%B7%D8%B1
    http://www.barnamenevis.org/sh...B3%D8%B7%D8%B1
    http://www.barnamenevis.org/sh...B3%D8%B7%D8%B1
    http://www.barnamenevis.org/sh...B3%D8%B7%D8%B1
    https://barnamenevis.org/showth...color+dbgrid#3

    تازه فکر کنم تعداد تاپیکهای مرتبط بیشتر هم بود...

  23. #23

    نقل قول: همه چیز در مورد DBGrid

    با سلام و روز بخیر...

    ادامه مبحث DBGrid ....



    جابجایی ستون ها

    در زمان طراحی : یک ستون را با ماوس انتخاب میکنیم و Drag میکنیم. همین!

    در زمان اجرا : تنها در صورتی User ها میتونن ستونها رو در زمان اجرا جابجا کنند که خاصیت DragMode برابر با dmManual باشه یعنی بشه بصورت دستی تنظیمش کرد. اگر کاربر یک ستون را جابجا کند رویداد OnColumnMoved رخ میدهد که میتونیم متد خودمون رو اونجا بنویسیم تا به هنگام جابجایی ستون اجرا شود. برای جلوگیری از انتقال ستونها توسط کاربران در زمان اجرا خاصیت DragMode را به dmAutomatic تغییر دهید. (فکر میکنم این مسئله رو خیلی ها رعایت نمی کنند)


    کنترل رسم

    اولین سطح کنترل رسم گرید، تعیین خواص ستونها می باشد. این خواص چگونگی ظاهر شدن یک ستون را مشخص میکنند. گرید بصورت اتوماتیک از خواص فونت، رنگ و ... یک ستون برای رسم سلولها استفاده میکنه. متن داخل سلولها مطابق با خواص DisplayFormat یا EditFormat از فیلدهای مرتبط رسم میشه. اگر میخواهید رسم پیش فرض رو بهبود ببخشید، میتونید کد مورد نظرتون رو در رویداد OnDrawColumnCell بنویسید. اگر میخواهید رسم پیش فرض انجام بشه و بعد از اون رسم شما انجام بگیره خاصیت DefaultDrawing را True کنید. در اینصورت ابتدا رسم پیش فرض صورت میگیرد و بعد بلافاصله رسم شما انجام می شود. این کار وقتی به درد میخوره که مثلا میخواهید یک ستون ثابت خالی داشته باشید و بخواهید در آن تصویر رسم کنید.

    اگر میخواهید رسم تمام گرید رو خودتون به دست بگیرید، خاصیت DefaultDrawing را False کنید و کد خودتون رو در رویداد OnDrawColumnCell بنویسید.

    اگر میخواهید که رسم ستونهای خاصی رو خودتان انجام دهید و بقیه ستونها بصورت پیشفرض رسم شوند، میتوانید DefaultDrawColumnCell را در داخل رویداد OnDrawColumnCell فراخوانی کنید. مثال آن در مقاله رنگ کردن DBGrid موجود است.



    در پست بعد ادامه میدیم....

  24. #24

  25. #25

    نقل قول: همه چیز در مورد DBGrid

    خوشحال میشم دوستان هم برای کامل شدن این تاپیک نظر بدهند.


    موفق باشید.

  26. #26

    نقل قول: همه چیز در مورد DBGrid

    مثل اینکه متاسفانه یکی دیگه از مشکلات اینه که کاربران بیشتر صفحه اول هر تاپیکی رو مشاهده می کنند.

  27. #27

    نقل قول: همه چیز در مورد DBGrid

    کارتون واقعا جای تحسین داره

    یک مطلب هم در مورد کپی کردن قسمت های انتخاب شده DBgrid بگید

  28. #28

    نقل قول: همه چیز در مورد DBGrid

    نقل قول نوشته شده توسط solook مشاهده تاپیک
    یک مطلب هم در مورد کپی کردن قسمت های انتخاب شده DBgrid بگید
    فکر میکنم کامل باشه :

    Copying and Pasting Cell Values in a DBGrid

  29. #29

    نقل قول: همه چیز در مورد DBGrid

    اگه بخوایم چند سطر تو دیبی گرید رو با هم انتخاب کنیم چه کاری میشه کرد؟
    مثلا با Drag یا نگه داشتن Shift+Arrowkey؟؟؟
    نیاز فوری دارم

  30. #30

    نقل قول: همه چیز در مورد DBGrid

    نقل قول نوشته شده توسط tagarg مشاهده تاپیک
    اگه بخوایم چند سطر تو دیبی گرید رو با هم انتخاب کنیم چه کاری میشه کرد؟
    اگه قبل از مطرح کردن سوال همین تاپیک را کامل میخوندید متوجه می شدید.

    در مورد Option های DBGrid در صفحه قبل توضیح داده شده است. (dgMultiSelect)

  31. #31
    کاربر دائمی آواتار ariobarzan
    تاریخ عضویت
    تیر 1386
    محل زندگی
    ايران زمين
    پست
    413

    نقل قول: همه چیز در مورد DBGrid

    با تشكر از اطلاعات مفيدتون
    من ميخوام تعدادي از ركورد هاي دي بي گريد توسط كاربر انتخاب بشه و بعد تغييراتي روي بعضي از فيلدهاي اون انجام بشه
    خاصيت dgmultiselect را true كردم و حالا امكان انتخاب چند ركورد فراهم شده
    تا اينجا خوب بوده ولي نميدونم چطور با اين ركورد هاي انتخاب شده ارتباط برقرار كنم و بعضي فيلد هاشونو ويرايش كنم
    ممكنه راهنمايي بفرماييد
    ممنون

  32. #32

    نقل قول: همه چیز در مورد DBGrid

    از اونجا که این خاصیت معمولا با خاصیت dbRowSelect همزمان True می شود برای ویرایش داده ها استفاده نمی شود. اما میتوانید از متد GotoBookMark برای دسترسی به واحدهای انتخاب شده استفاده کنید. ذر واقع رکوردها یا ردیفهای انتخاب شده در DbGrid به عنوان BookMark هایی در خاصیت SelectedRows ثبت می شوند. اما باید توجه داشته باشید که نمیشه از این خاصیت برای هر منظوری استفاده کرد. مثلا میتونید با یک حلقه به تعداد رکوردهای انتخاب شده مقدار یک فیلد رو بخونید و بعد مثلا SUM اون رو حساب کنید یا .... این لینک ها را ببینید :

    Summing multiple selected rows in a DBGrid

    DBGrid with MultiSelect

  33. #33
    کاربر دائمی آواتار ariobarzan
    تاریخ عضویت
    تیر 1386
    محل زندگی
    ايران زمين
    پست
    413

    نقل قول: همه چیز در مورد DBGrid

    با سلام
    ضمن تشكر از توجه شما من با استفاده از لينكي كه شما ذكر كرده بوديد كد زير را نوشتم
    procedure TForm1.Button1Click(Sender: TObject);
    var
    i:integer;
    begin
    ADOTable1.Open;
    for i := 1 to DBGrid1.SelectedRows.Count do
    begin
    ADOTable1.Edit;
    ADOTable1.GotoBookmark(Pointer(DBGrid1.SelectedRow s.Items[i-1]));
    ADOTable1.FieldValues['TitleOfCourtesy']:='Dr';
    ADOTable1.Post;
    end;
    end;


    ولي با وجود اينكه جدول در حالت اديت قرار داره ولي موقع اجرا پيام ميده كه جدول در حالت
    edit يا insert قرار نداره
    بانك برنامه northwind و جدول هم Employees انتخاب شده
    با تشكر

  34. #34

    نقل قول: همه چیز در مورد DBGrid

    1- بهتر است حلقه خود را از 0 تا SelectedRows.Count-1 بگذارید.

    2- زمانی که از متد GotoBookMark برای یافتن رکوردهای انتخاب شده استفاده میکنید DataSet شما از حالت Edit خارج می شود. بنابراین ADOTable.Edit را باید بعد از این متد قرار دهید.

    موفق باشید.

  35. #35
    کاربر دائمی آواتار ariobarzan
    تاریخ عضویت
    تیر 1386
    محل زندگی
    ايران زمين
    پست
    413

    نقل قول: همه چیز در مورد DBGrid

    با سلام
    از راهنمايتون ممنونم
    مشكل حل شد
    البته وقتي شمارش از 0 تا 1- DBGrid1.SelectedRows.Count با شه پيغام خطا ميده
    باز هم ممنون

  36. #36

    نقل قول: همه چیز در مورد DBGrid

    مشکل احتمالا چیز دیگری است.

  37. #37
    کاربر دائمی
    تاریخ عضویت
    دی 1383
    محل زندگی
    net_ved@yahoo.com
    پست
    184

    نقل قول: همه چیز در مورد DBGrid

    کسی کدی داره که بتونه قسمتی از متن جستجو شده رو رنگی کنه
    یعنی مثلا اگه من دو حرف "در" را تایپ کردم ... اول از همه جدولم با یه فیلتر یا دستور اس کیو ال محدود بشه به اون رکرد هایی که شامل "در" هستند که تا اینجاشو بلدم که با Like %"در"% انجام می دم ... حالا می خوام توی تمام رکرد های یافت شده دو حرف "در" در فیلدها های لایت شود که نمایان باشد کجای جمله جستجو شده
    امیدوارم واضح گفته باشم ...

  38. #38

    نقل قول: همه چیز در مورد DBGrid

    کدهای تمام چیزهایی که گفتید در سایت وجود داره. هم رنگ کردن رکوردها، هم یافتن حروف جستجو شده. فکر کنم با همین تاپیک بتوانید به هدف برسید.


    موفق باشید.

  39. #39

    نقل قول: همه چیز در مورد DBGrid

    سلام و خسنه نباشيد براي مطالب جامعتون.
    من دنبال راهي ميگردم كه بشه در سلول هاي يك dbgrid عكس زمينه گذاشت.
    منظور يك عكس زمينه ثابت براي تمام سلول هاست.
    و بعد از اون سلول انتخاب شده عكس زمينش عوض بشه.
    تشكر.

  40. #40

    نقل قول: همه چیز در مورد DBGrid

    سلام
    كسي خونه نيست.
    بحث اين تاپيك مگه تموم شده؟؟؟
    يكي به دادم برسه لطفا.
    اين عكس رو مي خوام بذارم back سلول ها
    و اينم وقتي يه cell انتخاب شد.

    كه در آخر تبديل شه به اين
    عکس های ضمیمه عکس های ضمیمه
    • نوع فایل: jpg 1.jpg‏ (16.0 کیلوبایت, 1611 دیدار)
    • نوع فایل: jpg 2.jpg‏ (16.5 کیلوبایت, 1600 دیدار)
    • نوع فایل: jpg 3.jpg‏ (40.4 کیلوبایت, 1654 دیدار)
    آخرین ویرایش به وسیله carbon : سه شنبه 16 مهر 1387 در 02:18 صبح دلیل: اشتباه لپي

صفحه 1 از 3 123 آخرآخر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •