پاسخ به بازخوردهای پروژهها
استفاده از اشیاء پیچیده در حالت StronglyTypedList
با تشکر از شما
سوال من به این صورتکه من یک جدول master به نام personorder دارم که یک ICollection<PersonOrderDetail> داخل اون هستش اما در حالتی که با codefirst کار میکنم چطوری میتونم از icollection نوع property رو براش قرار بدم و جدول details رو در داخل گزارش بسازم
اصلا امکانش هست به حالت fluent کار کرد البته از روش کوئری نویسی جواب گرفتم
سوال من به این صورتکه من یک جدول master به نام personorder دارم که یک ICollection<PersonOrderDetail> داخل اون هستش اما در حالتی که با codefirst کار میکنم چطوری میتونم از icollection نوع property رو براش قرار بدم و جدول details رو در داخل گزارش بسازم
اصلا امکانش هست به حالت fluent کار کرد البته از روش کوئری نویسی جواب گرفتم
public class PersonOrder { public virtual ICollection<PersonOrderDetail> PersonOrderDetails { get; set; } }
پاسخ به بازخوردهای پروژهها
تعیین ستون های گزارش به صورت داینامیک
- متد column.IsVisible هر ستون رو متصل کنید به یک Checkbox متناظر.
به تعداد فیلدها checkbox خواهید داشت (یک checkbox list مثلا یا امثال آن). بعد هر کدام که انتخاب شد، در تعریف columns.AddColumn، متد column.IsVisible باید بر اساس وضعیت این Checkbox مقدار true یا false پیدا کند.
- یا اینکه چون مبنای کار تهیه گزارش در اینجا بر اساس کدنویسی است، اگر لیست فیلدهای قابل نمایش را دارید، یک حلقه درست کنید و در این حلقه، متد columns.AddColumn را فراخوانی کنید.
به تعداد فیلدها checkbox خواهید داشت (یک checkbox list مثلا یا امثال آن). بعد هر کدام که انتخاب شد، در تعریف columns.AddColumn، متد column.IsVisible باید بر اساس وضعیت این Checkbox مقدار true یا false پیدا کند.
- یا اینکه چون مبنای کار تهیه گزارش در اینجا بر اساس کدنویسی است، اگر لیست فیلدهای قابل نمایش را دارید، یک حلقه درست کنید و در این حلقه، متد columns.AddColumn را فراخوانی کنید.
پاسخ به بازخوردهای پروژهها
عدم سازگاری با EF
- بررسی کلاس نهایی OrderProductVariants به تنهایی مهم نیست.
زمانیکه entity1.entity2 دارید یعنی استفاده از خواص راهبری و عموما به صورت lazy loading است؛ خصوصا مطابق تصویری که ارسال کردید (order.OrderProductVariants).
- دریافت اطلاعات OrderProductVariants به همراه entity دربرگیرنده آن به یکباره انجام نشده، بلکه lazy loading در اینجا صورت گرفته (توسط EF؛ نه کتابخانه گزارش ساز).
راه حل: از متد Include استفاده کنید به همراه AsNoTracking که توضیح دادم.
- اینها هم باید در لایه سرویس شما انجام شوند و نه اینجا. لایه سرویس شما فقط باید یک List را بازگشت دهد.
زمانیکه entity1.entity2 دارید یعنی استفاده از خواص راهبری و عموما به صورت lazy loading است؛ خصوصا مطابق تصویری که ارسال کردید (order.OrderProductVariants).
- دریافت اطلاعات OrderProductVariants به همراه entity دربرگیرنده آن به یکباره انجام نشده، بلکه lazy loading در اینجا صورت گرفته (توسط EF؛ نه کتابخانه گزارش ساز).
راه حل: از متد Include استفاده کنید به همراه AsNoTracking که توضیح دادم.
- اینها هم باید در لایه سرویس شما انجام شوند و نه اینجا. لایه سرویس شما فقط باید یک List را بازگشت دهد.
پاسخ به بازخوردهای پروژهها
نحوه دریافت تعداد صفحات گزارش در هدر یا فوتر بصورت عدد
- مراجعه کنید به مثال CustomHeaderFooter ، فایل CustomFooter.cs، روال ClosingDocument آن. در اینجا عدد writer.PageNumber - 1 مساوی تعداد کل صفحات است.
- یا مراجعه کنید به مثال InlineProviders . در اینجا data.TotalPagesCountImage یک تصویر است که به صورت خودکار توسط برنامه در آخر کار مقدار دهی میشود. عددی که در آن درج میشود معادل تعداد کل صفحات است.
- و یا در مثال HtmlHeader ، تگ سفارشی به نام TotalPagesNumber به صورت خودکار در پایان کار تهیه گزارش توسط برنامه با تعداد کل صفحات مقدار دهی خواهد شد.
- یا مراجعه کنید به مثال InlineProviders . در اینجا data.TotalPagesCountImage یک تصویر است که به صورت خودکار توسط برنامه در آخر کار مقدار دهی میشود. عددی که در آن درج میشود معادل تعداد کل صفحات است.
- و یا در مثال HtmlHeader ، تگ سفارشی به نام TotalPagesNumber به صورت خودکار در پایان کار تهیه گزارش توسط برنامه با تعداد کل صفحات مقدار دهی خواهد شد.
پاسخ به بازخوردهای پروژهها
گزارش گیری از رکوردی با حداقل 30 فیلد
«گزارش منطقی» یعنی اینکه تعداد فیلدها زیاده ... حوصله ندارم براشون تعریف خاصی رو ارائه بدم؟
میتونید از روش «تولید پویای ستونها در PdfReport» استفاده کنید. به این صورت فقط کوئری بنویسید ... مابقی آن خودکار است.
فیلدها در صفحه جا نمیشوند؟
روی دو مورد ذیل کار کنید (اندازه صفحه و همچنین Landscape کردن آن):
میتونید از روش «تولید پویای ستونها در PdfReport» استفاده کنید. به این صورت فقط کوئری بنویسید ... مابقی آن خودکار است.
فیلدها در صفحه جا نمیشوند؟
روی دو مورد ذیل کار کنید (اندازه صفحه و همچنین Landscape کردن آن):
doc.Orientation(PageOrientation.Portrait); doc.PageSize(PdfPageSize.A4);
پاسخ به بازخوردهای پروژهها
راهنمایی در مورد ایجاد columnها
نتیجه کوئری LINQ شما چون نهایتا به select new بدون ذکر نام کلاس خاصی منتهی شده یعنی از نوع Anonymous است و نه strongly typed. اگر پس از select new، نام کلاس خاصی را برای projection نهایی ذکر میکردید، نتیجه نهایی میشد strongly typed.
بنابراین بهتر است از منبع داده dataSource.AnonymousTypeList استفاده کنید.
همچنین در این حالت ستونهای گزارش شما بر اساس select آخر و projection آخر است که تعیین میشوند (که در مثال شما فقط دو خاصیت است و نه بیشتر). به عبارتی در حالت AnonymousTypeList فوق خواهیم داشت:
بنابراین بهتر است از منبع داده dataSource.AnonymousTypeList استفاده کنید.
همچنین در این حالت ستونهای گزارش شما بر اساس select آخر و projection آخر است که تعیین میشوند (که در مثال شما فقط دو خاصیت است و نه بیشتر). به عبارتی در حالت AnonymousTypeList فوق خواهیم داشت:
column.PropertyName("CostName"); //... column.PropertyName("CostAmount");
پاسخ به بازخوردهای پروژهها
گزارش در سیلورلایت
- در مورد مزایای فایلهای PDF و خصوصا بحث پرینت مطلوب توسط کاربر لطفا مراجعه کنید به مطلب معرفی PdfReport . این مزایا رو XAML به شما نمیده. اگر گزارش رسمی قابل چاپ نیاز دارید، بهترین فرمت PDF است. میتونید گریدهای XAML رو صرفا برای نمایش هم استفاده کنید، اما کیفیت چاپی PDF رو نداره.
- یک مثال در مورد نحوه استفاده از PdfReport در سیلورلایت به همراه سورسهای برنامه موجود است. لطفا مراجعه کنید به پوشه Samples\SlPdf. برای استفاده، از WCF Service استفاده کرده.
- یک مثال در مورد نحوه استفاده از PdfReport در سیلورلایت به همراه سورسهای برنامه موجود است. لطفا مراجعه کنید به پوشه Samples\SlPdf. برای استفاده، از WCF Service استفاده کرده.
بازخوردهای پروژهها
درخواست مستندات
سلام آقای نصیری
ممنون بابت این برنامه بسیار مفیدی که در دسترس عموم قرار دادید.
راستش فکر میکنم جای یک documentation همراه با مثالهای بسیار ساده تا پیشرفته در اینجا خالیه. میدونم وقت شما رو میگیره ولی راستش من برای بار اول برای یک گزارش خطهای زیادی از کد رو دیدم که باید حدس میزدم هر کدوم چکار میکنن. ممنون میشم به این مورد توجه بفرمایید
بازخوردهای پروژهها
چگونگی ایجاد گزارش بدون اینکه تداخل داده به وجود آید
با سلام.
من در یک وب سایت میخواهم از کتابخانه PdfRpt استفاده کنم ولی در تمام مثالها که فرمودید اطلاعات در یک فایل ذخیره میشوند که با توجه به این کار اگر چند کاربر به صورت همزمان از یک گزارش استفاده کنند (مثلاً هر مشتری فقط رکوردهای مربوط به خودش رو میبینه) در این صورت تداخل داده به وجود میآید. میخواستم بپرسم که برای این کار راحل چیست؟ آیا باید فایل را در حافظه ایجاد کنیم ؟ ممنون میشم راهنمایی کنید چون من وقتی که خواستم در حافظه ایجاد بکنم به مشکل برخوردم که این مشکل باعث شد که من ایجا این مسله رو مطرح کنم. ممنونم
من در یک وب سایت میخواهم از کتابخانه PdfRpt استفاده کنم ولی در تمام مثالها که فرمودید اطلاعات در یک فایل ذخیره میشوند که با توجه به این کار اگر چند کاربر به صورت همزمان از یک گزارش استفاده کنند (مثلاً هر مشتری فقط رکوردهای مربوط به خودش رو میبینه) در این صورت تداخل داده به وجود میآید. میخواستم بپرسم که برای این کار راحل چیست؟ آیا باید فایل را در حافظه ایجاد کنیم ؟ ممنون میشم راهنمایی کنید چون من وقتی که خواستم در حافظه ایجاد بکنم به مشکل برخوردم که این مشکل باعث شد که من ایجا این مسله رو مطرح کنم. ممنونم