عنوان:

‫ایجاد گزارشات Crosstab در PdfReport


نویسنده: وحید نصیری
تاریخ: ۱۳۹۱/۰۷/۲۷ ۱۱:۴۴
آدرس: www.dntips.ir
پیشنیازها
تهیه گزارشات Crosstab به کمک LINQ 
تهیه گزارشات Crosstab به کمک LINQ - قسمت دوم 

در دنیای واقعی، تهیه گزارشات به سادگی که در اکثر نرم افزارهای گزارش ساز موجود پیش بینی شده است، نیست. در این نوع نرم افزارها، بر اساس یک طراح بصری، تعدادی ستون مشخص، ایجاد شده، منبع داده‌ای به این ستون‌ها متصل و نهایتا گزارش تهیه می‌شود. اما اگر همین گزارش دارای تعداد ستون‌های متغیری باشد، اغلب این برنامه‌ها ناکارآمد خواهند بود. برای مثال لیست حضور و غیاب دانش آموزان را درنظر بگیرید.
اگر معلمی بخواهد سه روز در هفته را گزارش بگیرد، گزارش نیاز به سه ستون خواهد داشت. اگر 20 روز قبل مد نظر باشد، 20 ستون و همینطور الی آخر.
یا نمونه‌ی دیگری از این دست، گزارش حضور و غیاب پرسنل است. در اینجا بر اساس تعداد باری که شخص کارت می‌زند، ورود و خروج او محاسبه می‌شود. این مورد هم تعداد ثابتی نیست. ممکن است یک نفر 8 بار در طول روز کارت بزند، یک نفر فقط دو بار. به علاوه جمع ساعات هم اینجا دیگر عددی نیست و نیاز به فرمول خاصی دارد.

روش حل این نوع مسایل را در PdfReport در مثال‌های جدید ذیل می‌توانید مشاهده کنید:
1) DynamicCrosstab (یک گزارش Crosstab با تعداد ستون متغیر)



2) WorkedHours (یک گزارش Crosstab با تعداد ستون متغیر به علاوه تابع تجمعی سفارشی محاسبه جمع ساعات اشخاص)



3) ExtraHeadingCells (یک گزارش Crosstab به همراه ردیف‌های header اضافی و نحوه تعریف آن)



4) ExpensesCrosstab (یک گزارش Crosstab کلاسیک)



5) PdfA (یک گزارش Crosstab که به صورت استاندارد PdfA تهیه شده است. PdfA حالت خاصی از استاندارد PDF است که برای مستند سازی عموما مورد استفاده قرار می‌گیرد. رمزنگاری اطلاعات در آن ممنوع است. تصاویر بکارگرفته شده نباید شفاف باشند. قلم‌های مورد استفاده حتما باید در فایل مدفون شوند و مواردی از این دست)
 

نظرات

  • مهمان در ۱۳۹۱/۱۰/۱۲ ۱۴:۱۷
    سلام
    فوق العاده حرفه ای و دارای انعطاف پذیری بالایی است!
    من قبلا با telerik reporting کار کردم که بیشتر به با ویزارد کار می‌کنه، ولی خوب این روش code first شاید اولش یه کم شلوغ و پیچیده به نظر بیاد ولی ابزار بسیار کارآمدیست.

    یک سوال:
    DisplayName را چطور روی ستونهای گزارشات crosstab اعمال نماییم؟


    • وحید نصیری در ۱۳۹۱/۱۰/۱۲ ۱۴:۵۵
      دو نوع crosstab داریم. در حالت معمول مانند ExpensesCrosstab که ستون‌های خروجی مشخص هستند می‌تونید از همان متد column.PropertyName استفاده کنید و به همراه سایر تنظیمات دیگر ستون. در حالت پیشرفته crosstab پویا که تعداد ستون‌های خروجی مشخص نیستند و هربار می‌تواند متغیر باشد مثل گزارش ساعات کاری، یک روش این است که نام خاصیت‌ها را کمی واضح‌تر انتخاب کرد. فارسی هم مجاز است:
       list.Pivot(x =>
                      new
                      {
                        نام‌ستون = 

      • مهمان در ۱۳۹۱/۱۰/۱۷ ۱۲:۷
        سلام
         نام‌ستون   در linq اعمال می‌شود ولی در خروجی گزارش به زیر نمایش داده می‌شود:
        نامستون 
        • وحید نصیری در ۱۳۹۱/۱۰/۱۷ ۱۳:۲۵
          - shift+space یا نیم فاصله اینجا استفاده شده بود.
          - راه بهتر: مثال DynamicCrosstab رو کمی تغییر دادم. به events.RowStarted آن دقت کنید. در این روال رخداد گردان می‌تونید در هر نوع گزارشی در PdfReport، برچسب‌های سطر هدر جدول تولیدی رو پیش از درج در فایل گزارش، کلا تغییر بدید: (^)
          - اگر سؤالی در مورد PdfReport دارید لطفا در قسمت سؤال و جواب‌های آن مطرح کنید.
          • مهمان در ۱۳۹۱/۱۰/۱۷ ۱۳:۴۸
            با تشکر فراوان از آقای نصیری، مشکل  رفع شد.