PDA

View Full Version : تغییر دیتا در dbgrid قبل از نمایش



ariobarzan
یک شنبه 28 تیر 1394, 16:18 عصر
با سلام
تغییر دیتا در dbgrid قبل از نمایش چطور امکان پذیر است؟
من فیلدی در دیتا بیس دارم از نوع Boolean
وقتی که توی DBGrid نمایش داده میشود بصورت true یا false نشون داده میشه و من میخوام بجای اون از کلمات بله یا خیر یا چیزهای مشابه استفاده کنم.
راه حل چیه؟

Delphi2010
یک شنبه 28 تیر 1394, 17:09 عصر
اگر برای نمایش گرید از Adotable استفاده می کنید روی کامپوننت Adotable دابل کلیک کنید و سپس پنجره ایی که ظاهر می شود راست کلیک کرده و گزینه NewField را انتخای کنید
و فیلد جدیدی انتخاب کنید و سپس در قسمت رخداد GetText فیلد جدیدی که تعریف کردید هر کدی دوست داستید برای نماش بنویسید

hp1361
یک شنبه 28 تیر 1394, 17:19 عصر
سلام

از هر دیتا سیتی که استفاده می کنید برای فیلد هاش تابع GetText رو قاعدتا برای فیلد هاش خواهد داشت. خیلی ساده برای فیلد Boolean خودتون چک کنید و مقدار Text رو هر چیزی که دوست دارید تنظیم کنید!


موفق باشیم

ariobarzan
یک شنبه 28 تیر 1394, 17:21 عصر
من از Query استفاده میکنم و دیتاست اون را وصل کردم به DBgrid
لطفا راهنمایی بفرمایید
ممنون

Mahmood_M
یک شنبه 28 تیر 1394, 17:27 عصر
می تونید از خاصیت DisplayValue مربوط به فیلد مورد نظر استفاده کنید :

MyBooleanField.DisplayValues := 'بله;خیر';
یا از رویداد OnGetText مربوط به فیلد استفاده کنید و مقدار Text رو تغییر بدید

procedure TForm1.MyBooleanFieldGetText(Sender: TField; var Text: string; DisplayText: Boolean);
begin
case Sender.AsBoolean of
True : Text := 'بله';
False : Text := 'خیر';
end;
end;

اگر فیلدهاتون Static نیستند و مثلا از Query استفاده می کنید ، می تونید به صورت زیر عمل کنید :

(ADOQuery.Fields[0] as TBooleanField).DisplayValues := 'بله;خیر';

ariobarzan
یک شنبه 28 تیر 1394, 17:54 عصر
ممنون از اینکه پاسخ میدین
بزارید سوالم را کلی تر بپرسم
من میخوام با توجه به مقادیری که قراره توی سل های DBGrid که به یک query وصل هست مقادیر دیگه ای زا جایگزین کنم مثلا
ممکنه که تاریخ بصورت 940429 و یا 94/04/29 در دیتابیس ذخیره شده باشه که نمایش اون در این حالت خوشآیند نیست و میخوام بصورت 1394/04/29 توی DBGrid نشون داده بشه
پس باید دوتا کار را انجام بدم اول تشخیص اینکه دیتا بصورت 940429 و یا 94/04/29 هست که از اندازه رشته با دستور Length قابل تشخیص هست و بعد
برای حالت اول جداسازی رشته با دستور Copy و اضافه نمودن 13 به مقدار سال و همین طور اضافه نمودن / بین روز و ماه و سال
برای حالت دوم هم فقط اضافه کردن 13 به ابتدای عدد سال.
تا اینجا مشکلی نیست فقط میمونه که نتیجه را چطور انتقال بدم به DBGrid :متفکر:
اگر این موضوع حل بشه براحتی تغییر در سایر موارد مشابه هم مثل مورد True یا False بودن و جایگزینی با دیتای مورد نظر در DBGrid حل میشه.
ممنون

Mahmood_M
دوشنبه 29 تیر 1394, 15:02 عصر
چیزی به DBGrid ارسال نمیشه ، فقط می تونید با روشهایی که توضیح داده شد ، یک پوسته برای نمایش اطلاعات ایجاد کنید
باید از رویداد OnGetText استفاده کنید ، اگر امکانش وجود داره ، فیلدها رو در حالت Design اضافه کنید و این رویداد رو تغییر بدید ، در غیر اینصورت به صورت RunTime ، رویداد OnGetText رو با یک رویداد تعریف شده Set کنید
نحوه ی انجام این کار هم قبلا بارها توضیح داده شده ، جستجو کنید

SayeyeZohor
جمعه 02 مرداد 1394, 15:23 عصر
می تونین دستور اسکیوال بنویسید که اونجا تشخیص داده بشه و کوئری خودتون رو به دیبیگرید با استفاده از یه datasource متصل کنید

meysam_212
شنبه 03 مرداد 1394, 00:57 صبح
سلام
برای این کاری که میگی میتونی از از رویداد ondrawColumnCell دیبیگرید استفاده کنی، همین رویداد رو تو گوگل جستجو کنی میاره، کاره خاصی نداره، ولی من پیشنهاد میکنم کامپوننت ehlibرو نصب کنی و از dbgrid اون استفاده کنی که این کاری که برای تاریخ میخوایی رو انجام میده یا جدا کننده عدد مثل قیمت، برای boolean هم اگه بخوایی checkbox میزاره، با خیلی چیزای دیگه که برای خیلی از کارا جواب میده