View Full Version : سوال: ضرب مقادیر هنگام ورود اطلاعات به Dbgrid
delphiprog3000
دوشنبه 07 اردیبهشت 1388, 09:02 صبح
با سلام به دوستان و اساتید محترم.
برنامه را طوری ساختم که ورود اطلاعات و نمایش اطلاعات در Dbgrid انجام شود.
و مشکل اینجاست که هنگام ورود اطلاعات نمیتوان فیلدهای وارده به Dbgrid را تا زمان ثبت نمودن با هم ضرب نمود. به طور مثال:
در شکل پایین همانطور که مشخص است. هنگام ورود اطلاعات که تمامی سطرها خالی میباشد.میخواهم پیش از وارد نودن به جدول تعدادی از فیلدها با هم ضرب شوند.
به طور مثال فیلد :
جمع کل=قیمت واحد*طول*عرض*متراژ*تعداد
اما وقتی که میخواهم فیلد مربوط را به متغییری نسبت دهم Error مبنی بر اینکه نمیتوان فیلد خالی را به متغییری نسبت داد.
که عکس آن را قرار دادم.
مریم کشاورزنژاد
دوشنبه 07 اردیبهشت 1388, 10:19 صبح
باید این فرمول را در Events dbgridدر قسمت OnColExit تمام مقادیری که در فرمول هستند قرار داد و قبل از فرمول یک if قرار داد که Null بودن فیلدها را چک کند و در صورتی فرمول اجرا شودکه هیچ کدام Null نباشد بعد از هر بار اینتر از روی هر فیلد این events اجرا میشود
بهتر بود فیلدها را Defult آنها را در ابتدا در جدول صفر تعریف می کردید
mohsen_r
دوشنبه 07 اردیبهشت 1388, 10:30 صبح
من اينكار را در ongettext انجام ميدم
و فرمول هاي اين رقمي راحت انجام ميشه
delphiprog3000
دوشنبه 07 اردیبهشت 1388, 10:50 صبح
باید این فرمول را در Events dbgridدر قسمت OnColExit تمام مقادیری که در فرمول هستند قرار داد و قبل از فرمول یک if قرار داد که Null بودن فیلدها را چک کند و در صورتی فرمول اجرا شودکه هیچ کدام Null نباشد بعد از هر بار اینتر از روی هر فیلد این events اجرا میشود
بهتر بود فیلدها را Defult آنها را در ابتدا در جدول صفر تعریف می کردید
سلام دوست من از پاسخت ممنونم.
من از dbadvgrid استفاده میکنم که از سری tms است.امکانات زیادی رو در اختیار میزاره.
اما بنده بدین صورت در این event قرار دادهام اما باز متوجه شرط من نمیشود.
procedure Tsel_form.DBAdvGrid1EditingDone(Sender: TObject);
begin
if DBAdvGrid1.Columns[4].Field.AsInteger<>0 then
begin
price1:=DBAdvGrid1.Columns[4].Field.AsInteger;
end;
if DBAdvGrid1.Columns[5].Field.AsInteger<>0 then
begin
height1:=DBAdvGrid1.Columns[5].Field.AsInteger;
end;
if DBAdvGrid1.Columns[6].Field.AsInteger<>0 then
begin
width1:=DBAdvGrid1.Columns[6].Field.AsInteger;
end;
if DBAdvGrid1.Columns[7].Field.AsInteger<>0 then
begin
metraj1:=DBAdvGrid1.Columns[7].Field.AsInteger;
end;
if DBAdvGrid1.Columns[8].Field.AsInteger<>0 then
begin
count1:=DBAdvGrid1.Columns[8].Field.AsInteger;
end;
//ShowMessage(inttostr(strtoint(price1)* strtoint(height1)*strtoint(width1)*strtoint(metraj 1)*strtoint(count1)));
//ShowMessage(inttostr((price1)* (height1)*(width1)*(metraj1)*(count1)));
DBAdvGrid1.Columns[9].ComboItems.Text:=inttostr((price1)* (height1)*(width1)*(metraj1)*(count1));
}end;
راه شمارو تست میکنم. بازم از پاسخت متشکرم.
delphiprog3000
دوشنبه 07 اردیبهشت 1388, 10:52 صبح
من اينكار را در ongettext انجام ميدم
و فرمول هاي اين رقمي راحت انجام ميشه
منظور شما همان Ongettext کوری است؟
mohsen_r
دوشنبه 07 اردیبهشت 1388, 11:26 صبح
بله منظورم همين است
vcldeveloper
دوشنبه 07 اردیبهشت 1388, 12:06 عصر
فیلدی که مقدار آن از روی پردازش مقادیر سایر فیلدهای یک رکورد بدست میاد را نباید در جدول ذخیره کنید، و باید بصورت فیلد محاسباتی تعریف بشه.
delphiprog3000
سه شنبه 08 اردیبهشت 1388, 18:40 عصر
با سلام.
تشکر میکنم از پاسخ دوستان خصوصا استاد گرامی جناب کشاورز.
با تعریف Calculated Field و نوشتن کدهای مربوط به حاصل ضرب فیلدها در رویداد Oncalcfield کوری مربوطه مشکل رفع شد.
با تشکر..............
موفق باشید.............
delphiprog3000
سه شنبه 08 اردیبهشت 1388, 18:47 عصر
منظور شما همان Ongettext کوری است؟
جناب کشاورز نظر شما در این رابطه چی میتونه باشه. بنده تست کردم به مقصودم نرسیدم.
با تشکر...................
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.