نمایش نتایج 1 تا 5 از 5

نام تاپیک: نمایش Custom Field در گرید

  1. #1
    کاربر دائمی آواتار seyed_farid
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    459

    نمایش Custom Field در گرید

    با سلام
    یک فیلد boolean دارم که بجای True/False من auto/Manual در دیتابیس Access قرار دادم ولی در Db Grid که نمایش میدم بصورت True/False نمایش میده .
    کار با adotable انجام شده.
    دوستان میتونن راهنمایی کنن چطور میشه بصورت auto/Manual نشونش داد؟

  2. #2
    کاربر دائمی آواتار seyed_farid
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    459

    نقل قول: نمایش Custom Field در گرید

    این هم راهش

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

    var
    sText : String;

    begin

    if (UpperCase(Column.Field.FieldName) = 'STATE') or
    (UpperCase(Column.Field.FieldName) = 'AUTO')) then
    begin
    if Column.Field.Value = True then
    sText := 'Auto'
    Else
    If Column.Field.Value = False Then
    sText := 'Manual'
    Else sText := '';
    (Sender as TDBGrid).Canvas.FillRect(Rect);
    (Sender as TDBGrid).Canvas.TextRect(Rect, Rect.Left+3, Rect.Top+2, sText);
    end
    Else
    Begin { I added this to draw all other columns as defaultdrawing is off }
    (Sender as TDBGrid).defaultdrawcolumncell(Rect, DataCol, Column, State);
    End;
    end;

  3. #3

    نقل قول: نمایش Custom Field در گرید

    به جای تغییر متن Grid باید توی رویداد onGetText مربوط به Field مثلا به صورت زیر متنی که قصد دارید نمایش داده بشه رو تغییر بدید :
     case Sender.AsBoolean of
    True : Text := 'Auto';
    False : Text := 'Manual';
    else
    Text := '-';
    end;

    در حالت کلی برای نمایش مقداری متفاوت از چیزی که درون فیلد ذخیره میشه باید از رویداد OnGetText مربوط به Field استفاده کنید
    استفاده از این رویداد باعث تغییر متن در سطح فیلد میشه و متن هر کامپوننتی که به فیلد وصل هستش تغییر می کنه، مثل DBGrid یا DBLabel یا ...
    رویداد DrawColumnCell مربوط به Grid دفعات زیادی اجرا میشه و تغییر متن Cell توی این رویداد می تونه باعث کند شدن Grid بشه

  4. #4
    کاربر دائمی آواتار seyed_farid
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    459

    نقل قول: نمایش Custom Field در گرید

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

  5. #5

    نقل قول: نمایش Custom Field در گرید

    یک Procedure برای فرم یا DataModule با Signature مشابه رویداد OnGetText مربوط به Field بسازید به این صورت :
    procedure TForm1.MyFieldGetText(Sender: TField; var Text: String;
    DisplayText: Boolean);
    begin
    case Sender.AsBoolean of
    True : Text := 'Auto';
    False : Text := 'Manual';
    else
    Text := '-';
    end;
    end;


    در رویدادی مثل OnAfterOpen مربوط به Query می تونید به این صورت، رویداد OnGetText مربوط به فیلد ها رو ست کنید :
    procedure TDM.MyQueryAfterOpen(DataSet: TDataSet);
    begin
    MyQuery.Fields[0].OnGetText := Form1.MyFieldGetText;
    end;

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

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