PDA

View Full Version : مشکل با fast report



rasoolgh
پنج شنبه 01 شهریور 1386, 08:10 صبح
سلام
من یه grid رو میخواهم با fast چاپ کنم ولی مشکلم اینه که فیلدهایی مانند جنسیت که در دیتابیس به صورت 0 یا 1 است ولی در گرید "مرد" یا "زن" است که با استفاده از ongettext فیلد
در گرید نمایش داده میشود و نمی خواهم از محیط کد نویسی خود fast استفاده کنم بلکه در طراحی این کار رو انجام بدم
لطفا راهنمایی کنید

DataMaster
پنج شنبه 01 شهریور 1386, 08:38 صبح
نمی دونم از چه نوع دیتابیسی استفاده می کنید
اما من در SQL Server برای اینجور مسائل View یا SP که دیتاست برمی گردونه استفاده می کنم و معادل هر کد رو توی اون به صورت یک فیلد مجزا قرار میدم که توی اینترفیس مجبور نباشم روی اون کد نویسی انجام بدم
یه چیزی استفاده از این جور کدها


Select @Res =Case @Apraisment
When 1 Then 'بسیار ضعیف'
When 2 Then 'ضعیف'
When 3 Then 'متوسط'
When 4 Then 'خوب'
When 5 Then 'بسیار خوب'
When 6 Then 'بلی'
When 7 Then 'خیر'
Else ' '
End

البته میتونی از خاصیت DisplayValues در فیلد ادیتور خود دلفی استفاده کنید و مقدار مناسب رو جایگزین کنید

rasoolgh
پنج شنبه 01 شهریور 1386, 11:39 صبح
من هم از sql server استفاده میکنم ولی از رویداد ongettext همه جای برنامه استفاده کردم
قبلا یه پروسجر نوشتم که با استفاده از prReport یک dbgrid رو میگره و اون رو چاپ میکنه و فیلدهایی که ongettext داشتند رو درست نشون میداد (با استفاده از FieldDisplayText که داشت) ولی توی fast report نمیدونم همچین چیزی داره یا نه

vcldeveloper
جمعه 02 شهریور 1386, 13:19 عصر
اگر می خواید که مستقیما توسط FastReport این کار را انجام دهید، می توانید از Variables در FastReport استفاده کنید:
یک متغیر string برای نمایش مقدار فیلد در صفحه Code از FastReport Designer تعریف کنید:


var
MyField : string;

در رویداد BeforePrint باند مورد نظر خود کدی شبیه به این بنویسید:


procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
var
FData : integer;
begin
FData := <frxDBDataSet1."MyField">;
case FData of
0 : MyField := 'A';
1 : MyField := 'B';
2 : MyField := 'C';
3 : MyField := 'D';
4 : MyField := 'E';
5 : MyField := 'F';
end;
end;

این کد متغیر MyField را برا اساس مقدار بدست آمده از فیلد MyField از جدول متصل به frxDBDataSet1 مقداردهی می کند.

حالا می تونید از این متغیر در گزارش خود استفاده کنید، مثلا یک Memo بر روی باند مربوطه قرار دهید و در آن بنویسید:
<MyField>
این عمل باعث می شود که Memo مربوطه در زمان چاپ مقدار متغیر MyField را نمایش دهد.

rasoolgh
شنبه 03 شهریور 1386, 12:54 عصر
از این راه نمی خواهم استفاده کنم چونکه میخواهم یک پروسیجر بنویسم که یک گرید را بگیرد و در fast چاپ کند در این صورت نمی توانم از این روش گفته شده استفاده کنم
یه راه حل دیگه میخواهم

vcldeveloper
شنبه 03 شهریور 1386, 19:37 عصر
روش بالا منافاتی با کاری که می خواید انجام بدید نداره، به هر تعداد فیلدهایی که از این نوع دارید، محدود هستند، می تونید برای هر کدام یک متغیر تعریف کنید و در صورت بکار رفتن آن فیلد در کوئری، از مقدار متغیر ایجاد شده استفاده کنید.