PDA

View Full Version : حرفه ای: جدا کردن سه رقم سه رقم TDBADVGrid



masoode
چهارشنبه 20 مهر 1401, 18:21 عصر
سلام دوستان
من می خواهم دو تا از فیلدهای یک گرید از نوع TDADVGrid از سری TMS را که مقدار آن مبلغ است به صورت سه رقم سه رقم جدا کننده بگذارم
با روش های ساده ای روی DBGrid این کار انجام میشه اما توی این کامپوننت رویداد OnDrawDataCell نداره!!!
چه راهی را پیشنهاد میکنید؟

procedure TFormMain.DBGridCompareDrawDataCell(Sender: TObject;
const Rect: TRect; Field: TField; State: TGridDrawState);
begin
if Field.Name = 'FIELDNAME' then
TFloatField(Field).DisplayFormat := '#,##0.00';
end;

یوسف زالی
پنج شنبه 21 مهر 1401, 05:17 صبح
سلام. این کد جاش در دیتاسته نه گرید!

masoode
شنبه 23 مهر 1401, 09:29 صبح
آقای زالی عزیز به نظرتون بهترین راه برای اینکار با استفاده از DBADVGrid+FDQuery چیه؟

یوسف زالی
شنبه 23 مهر 1401, 16:38 عصر
اینه که در رویدادهایی مثل OnGetText مرتبط با فیلدتون، و یا فرمت نمایشی خود فیلد، این کار رو انجام بدید، هیچ ارتباطی به گرید مورد استفاده نداره.
یعنی جاش دقیقا بعد از لود فیلدهاست، نه در رویدادهای گرید.

masoode
شنبه 23 مهر 1401, 16:47 عصر
154083
اتفاقا این رویداد بر خلاف نظر شما دقیقا توی TDBGrid است!
من فکر میکنم DBADVGrid باید این قابلیت را داشته باشه اما پیداش نمیکنم! مثلا توی پروپرتیهایی که در جدول Properies نمایش داده نمیشه!

یوسف زالی
یک شنبه 24 مهر 1401, 10:29 صبح
یعنی اگر به فرم مربوطه بیاییم DBText هم اضافه کنیم باید روی OnDraw اون هم کد بنویسیم؟!!
عجب!

کار رویدادی که شما دارید می گید رنگی کردن و آیکون گذاشتن و اینطور چیزهاست نه کار روی فیلد. این رویداد در اسکرول بارها ممکنه کال بشه، در کلیک کال می شه، در Repaint کال می شه، بعد روی همه اینها شما روی یک فیلد دارید کد می نویسید!

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

ضمنا رویدادی که اشاره بهش می کنید اصلا استفاده ازش توصیه نمی شه.
امیدوارم دیگه مارکو کانتو رو قبول داشته باشید:

masoode
یک شنبه 24 مهر 1401, 11:12 صبح
یعنی اگر به فرم مربوطه بیاییم DBText هم اضافه کنیم باید روی OnDraw اون هم کد بنویسیم؟!!
عجب!

کار رویدادی که شما دارید می گید رنگی کردن و آیکون گذاشتن و اینطور چیزهاست نه کار روی فیلد. این رویداد در اسکرول بارها ممکنه کال بشه، در کلیک کال می شه، در Repaint کال می شه، بعد روی همه اینها شما روی یک فیلد دارید کد می نویسید!

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

ضمنا رویدادی که اشاره بهش می کنید اصلا استفاده ازش توصیه نمی شه.
امیدوارم دیگه مارکو کانتو رو قبول داشته باشید:

در مورد نظر شما بحثی ندارم، کاملا حق با شما است.


اینه که در رویدادهایی مثل OnGetText مرتبط با فیلدتون، و یا فرمت نمایشی خود فیلد، این کار رو انجام بدید، هیچ ارتباطی به گرید مورد استفاده نداره.
یعنی جاش دقیقا بعد از لود فیلدهاست، نه در رویدادهای گرید.

رویداد OnGetText را در DBADVGrid یا FDQuery یا DataSource پیدا نمیکنم!
روش کار برام مهم نیست فقط یک خواسته دارم:
چگونه می توانم با استفاده از DBADVGrid+FDQuery فیلدهای مبلغ را سه رقم سه رقم جدا کنم؟

یوسف زالی
یک شنبه 24 مهر 1401, 16:42 عصر
اینطوری نمی شه، نمونه کد رو ببین، اصلا شما کاری به این که چی داره نشونش می ده ندارید.

masoode
دوشنبه 25 مهر 1401, 12:37 عصر
اینطوری نمی شه، نمونه کد رو ببین، اصلا شما کاری به این که چی داره نشونش می ده ندارید.

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

masoode
دوشنبه 25 مهر 1401, 13:32 عصر
توی DBADVGrid هم پیداش کردم!:قهقهه:
باید FloatFormat فیلدهای مورد نظر را 0.0n% بگذاریم!!
اینجا نوشتم شاید به درد بقیه هم بخوره