عنوان:

‫طراحی گزارش در Stimulsoft Reports.Net – بخش 2


نویسنده: رامین علیرضایی
تاریخ: ۱۳۹۲/۰۵/۰۳ ۲۱:۰
آدرس: www.dntips.ir
در این بخش هم به معرفی ابزار و امکانات این گزارش‌ساز خواهم پرداخت، که شامل بند Group , فیلد محاسباتی و کامپوننتهای Panel,Clone و همچنین نحوه ایجاد یک گزارش به صورت Master-Detail خواهد بود.
ابتدا برای شروع به شیوه‌ای که در بخش 1 بیان شد یک دیکشنری ایجاد کنید. بر روی صفحه طراحی رایت کلیک کنید و گزینه Design را انتخاب نمایید. فرم Page Setup ظاهر می‌شود، در پنل سمت چپ این فرم گزینه Columns را انتخاب نمایید. سپس مقادیر 2 و 0.1 را به ترتیب برای "Number of Columns" و "Column Gaps" ست نمایید. سپس بندهای Header , Group و Data را به ترتیب بر روی صفحه طراحی قرار دهید. بر روی بند Group دابل کلیک کنید و همانند تصویر زیر فیلد EmployeeID را از جدول Orders انتخاب نمایید.

حال بر روی بند Data دابل کلیک کنید و در بخش Data Source جدول Orders را انتخاب نمایید. از پنل ابزار یک کامپوننت Text بر روی بند Group قرار دهید و بر روی آن دابل کلیک کنید و در بخش Expression عبارت زیر را وارد نمایید.
Employee ID: {Orders.EmployeeID}  --- GLine: {GroupLine}
*GroupLine یک متغیر سیستمی است که شماره سطر جاری گروه را برمی‌گرداند.
از پنل Dictionary همانند تصویر زیر فیلدهای ShipName و ShipAddress را از جدول Orders بر روی بندهای Header و Data قرار دهید.

حال با مشاهده خروجی گزارش از سربرگ Preview شما شاهد یک صفحه دو ستونه خواهید بود که بر اساس فیلد EployeeID گروه بندی شده است. 
فیلد محاسباتی:
این نوع فیلد زمانی استفاده می‌شود که شما بخواهید در هر سطر از اطلاعات با توجه به مقادیر رکورد جاری محاسباتی را انجام داده و در گزارش نمایش دهید. برای اضافه کردن فیلد محاسباتی در پنل Dictionary بر روی جدول Order Details رایت کلیک کنید و گزینه New Calculated Column را انتخاب نمایید، همانند تصویر زیر

در فرم ظاهر شده مقادیر را به صورت زیر وارد نمایید:

Name: TotalPrice 
Alias: TotalPrice 
Type: decimal
Value: Order_Details.UnitPrice * Order_Details.Quantity
حال یک فیلد به نام TotalPrice به فیلدهای جدول Order Details اضافه شده است.

ایجاد گزارش به صورت Master-Detail
:
برای ایجاد چنین گزارشی نیاز به ارتباط بین جدولها می‌باشد. با توجه به نحوه ایجاد Connection برای این مثال، روابط بین جدولها انتقال داده نشده است ولی شما میتوانید رابطه بین جدولها را اضافه نمایید حتی اگر این رابطه در منبع اطلاعات وجود نداشته باشد. برای این مثال نیاز به دو رابطه بین جدول Orders Detail و جدولهای Orders, Products می‌باشد. برای انجام این کار کافیست در پنل Dictionary بر روی جدول Orders Detail رایت کلیک کنید و گزینه New Relation را انتخاب نماید. همانند تصاویر زیر مقادیر را ست نمایید.

حال بر روی صفحه طراحی بعد از بند DataBand1 به ترتیب بندهای Header و Data و Footer را اضافه نمایید. در بند HeaderBand2 چهار کامپوننت Text قرار دهید و به ترتیب از سمت چپ مقادیر زیر را در خصوصیت Text کامپوننتها قرار دهید.

ProductName
UnitPrice 
Quantity
TotalPrice
سپس بر روی بند DataBand2 دابل کلیک کنید در فرم Data Setup ابتدا در بخش Data Source جدول Orders Detail را انتخاب نمایید؛ در بخش Relation رابطه Orders را انتخاب نمایید و در نهایت در بخش Master Component بند DataBand1 را انتخاب نمایید. حال در بند DataBand2 چهار کامپوننت Text قرار دهید و به ترتیب از سمت چپ مقادیر زیر را در خصوصیت Text کامپوننتها قرار دهید.
{Order_Details.Products.ProductName}
{Order_Details.UnitPrice}
{Order_Details.Quantity}
{Order_Details.TotalPrice}
در بند FooterBand1 یک کامپوننت Text در زیر ستون TotalPrice قرار دهید و مقدار زیر را در خصوصیت Text آن قرار دهید.
{Sum(DataBand2,Order_Details.TotalPrice)}
نتیجه کار طراحی گزارش به شکل زیر خواهد بود.

حال میتوانید خروجی گزارش Master-Detail را از سربرگ Preview مشاهده نمایید. در صورتی که همانند تصویر بالا گزارش را طراحی کرده باشید در خروجی گزارش فاصله‌ای بین سطرها ایجاد شده است که علت آن ارتفاع کمتر کامپوننتهای Text نسبت به بندهای خود می‌باشد. برای رفع این مشکل، شما سه راه حل دارید.

الف: یکسان سازی ارتفاع کاپوننتها با بند دربرگیرنده آنها

ب: ست کردن خصوصیت Can Shrink بند دربرگیرنده کامپوننتها به مقدار true

ج: ست کردن خصوصیت Grow to Height کامپوننتهای Text به مقدار true

در این مثال ما از روش دوم استفاده میکنیم و خصوصیت Can Shrink بندهای HeaderBand2 و DataBand2 را به مقدار true ست میکنیم.

کامپوننتهای Panel و Clone :

Panel: به شما امکان می‌دهد تا کامپوننتها و بندها را دربر بگیرد و در واقع گروهی از کامپوننتها را ایجاد خواهد کرد. پنل می‌تواند مستقل بر روی صفحه طراحی قرار گیرد و یا در یک بند.

Clone: به شما امکان کپی کردن یک بخش از گزارش را میدهد که البته آن بخش فقط میتواند از نوع Panel باشد.

این دو کامپوننت یکی از عوامل قدرت این گزارش‌ساز می‌باشد. برای شروع یک Page (صفحه طراحی) دیگر به گزارش اضافه کنید. می‌توانید با رایت کلیک بر روی نوار سربرگهای محیط طراحی گزینه New Page را انتخاب نمایید. بر روی Page2 یک کامپوننت Panel قرار دهید، سپس از پنل Dictionary جدول Countries را دراگ کرده و در Panel1 رها کنید. در فرم Data تمامی فیلدها و بند Header را انتخاب نمایید، سپس یک کامپوننت Clone به صفحه طراحی اضافه کنید بلافاصله فرم Select Container ظاهر می‌شود، Panel1 را انتخاب کنید. حال شما می‌توانید خروجی گزارش را مشاهده کنید، خروجی Page2 بعد از خروجی Page1 ظاهر خواهد شد.

Report2-1.mrt 

نظرات

  • مهمان در ۱۳۹۲/۰۵/۰۵ ۸:۵۶
    با عرض سلام
    بسیار ممنون از این قسمت ، فقط می‌خواستم بدونم آیا ازگزارش در زمان اجرا یعنی ازطریق کدهای C# مطلبی گذاشته میشه یا خیر؟ متشکرم
    • رامین علیرضایی در ۱۳۹۲/۰۵/۰۵ ۱۱:۱۲
      سلام دوست عزیز.
      اگر عمری باقی بمونه حتما این بخش هم آموزش داده خواهد شد.
  • رضا گرمارودی در ۱۳۹۲/۱۱/۱۵ ۱۴:۲۱

    مشکلی که من با گزارش سازها دارم این است که همه اونها یک IEnumeable می‌گیرند. همچنین ارتباطات بین مستر دیتیل را خودشون انجام میدن یعنی کلیه رکوردهای مستر و دیتایل لود شده سپس حالا گزارش ساز شروع می‌کنه به جدا کردن اطلاعات.

    راهی وجود نداره که اول از این تنها اطلاعات مورد نیاز در هر ضفحه ای که در حال نمایش یا چاپ است لود بشه در ثانی برای هر دیتیل بتوان پارامترها را به کد ارسال کرد تا تنها رکوردهای موردنظر لود بشه؟

    • محسن خان در ۱۳۹۲/۱۱/۱۵ ۱۴:۳۳
      مشکلی که روش درخواستی شما داره شبیه به حالت lazy loading اشتباه استفاده شده در ORMها است (اصطلاحا بهش می‌گن n+1 select). اینطوری هزاران هزار کوئری به بانک اطلاعاتی بجای فقط یک کوئری و یک رفت و برگشت خواهید داشت.
  • رضا گرمارودی در ۱۳۹۲/۱۱/۲۳ ۱۶:۴۱

    سلام

    گزارش مستر دیتیل را در Ef برای پوکوهای virstul collection<detail> details چه طوری پیاده سازی باید کرد؟

    برای مثال :

    public class Master (){
       public int Id {get; set;}
       public string Name {get; set;}
       public Icollection<Detail>Details {get; st;}
    }
    
    public Class detail(){
      public int code {get; set;}
      public string datadetail {get; set;}
    }

    اگر یک IEnumerable<Master> d داشته باشیم. مستر دیتایل و اتصال اونها به stimulsoft چطوری انجام میشه؟

    • رامین علیرضایی در ۱۳۹۲/۱۲/۲۰ ۱۹:۴
      سلام
      تفاوتی در طراحی گزارش وجود نداره.
      شما باید اطلاعات را توسط report.RegBusinessObject برای استیمول بفرستید.
      تنها تفاوت طراحی برای این حالت این است که بعد رجیستر کردن اطلاعات برای اولین بار شما باید از متد design استفاده کنید تا پوکو شما به دیکشنری گزارش ساز اضافه بشه تا بتونی طراحی کنی. بقیه کار رو هم که میدونید.
      موفق باشید.
  • سعید شیرزادیان در ۱۳۹۲/۱۲/۰۴ ۱۹:۱۸
    آیا نمونه پروژه ای برای ساخت گزارش در وب دارید؟
    • رامین علیرضایی در ۱۳۹۲/۱۲/۲۰ ۱۸:۵۷
      سلام
      نمونه کد وب در مسیر نصب stimulsoft reports موجود میباشد.
  • مهمان در ۱۳۹۳/۰۱/۱۱ ۱۰:۳۲
    با عرض سلام  و خسته نباشید و تبریک سال نو :
    من با نرم افزار StimulSoft کار می‌کنم ولی مشکلی در نمایش فونت گزارشات تحت وب دارم به طوری که وقتی مثلاً برای اطلاعات فونت Lotus را تنظیم می‌کنم در خروجی گزارش تحت وب به فرمت Pdf یا Excel فونت مذکور به یکی از فونت‌های پیش فرض تبدیل میشه، البته در دوحالت هم تست کردم حالتی که سرور هاستینک دردسترس خودم بود و فونت‌ها نیز نصب شد و حالتی که بررروی هاست‌های خریداری شده که در هر دوحالت مثلا فونت arial نمایش می‌دهد، ناگفته نماند در سیستم‌های تحت ویندوز این مشکل وجود ندارد و همچنین همین گزارش را از طریق ویژوال استدیو سیستم خودم که صدا می‌زنم مشکلی در فونت ندارد.
    ممنون می‌شم اگر کمک بفرمایید.
    • سعید رضایی در ۱۳۹۳/۰۱/۱۲ ۱۴:۵۷
      سلام. این مشکل تو گزارش ساز تلریک و کریستال هم وجود داره. تو کریستال قبل از نمایش می‌شد گزارش رو تبدیل به pdf کنیم بعد نمایش بدیم که فقط تو این حالت فونت‌های سرور نمایش داده می‌شدند. تو استیمول و تلریک فونت‌ها از قسمت کلاینت خونده میشن. تنها راه ممکن اینه که فیلدها به صورت export as image باشن که اینکار هم زیاد جالب نیست. به نظر من استیمول واسه وب اصلا مناسب نیست و بهتره که تو ویندوز اپلیکیشن ازش استفاده بشه. اگه با تلریک مقایسش بکنین فرقشونو میبینین
    • رامین علیرضایی در ۱۳۹۳/۰۱/۱۶ ۰:۴۱
      با سلام خدمت شما و تبریک سال نو.
      پیشنهاد میکنم Html5 Viewr استفاده کنید. شاید مشکل حل شد. لینکهای زیر مربوط به نحوه استفاده و دمو آن میباشند.
      http://www.stimulsoft.com/en/videos?tags=web,viewer&id=175
      http://www.stimulsoft.com/en/videos?tags=web,viewer&id=177
      اگر مشکل حل نشد تنها راه بیان مشکل در انجمن استیمول هست که سریعا پاسخ میدهند.
      در صورتی که مطلب بیشتری پیدا کردم در همینجا به اشتراک میگذارم.
    • رامین علیرضایی در ۱۳۹۴/۰۴/۲۴ ۱۹:۳۲
      با سلام.
      در قسمت پشتیبانی سایت Stimulsoft نوشته شده که این گزارش ساز فقط از قلمهای نصب شده بر روی سیستمی که بر روی آن گزارش تولید میشود پشتیبانی میکند.
    • علی یگانه مقدم در ۱۳۹۶/۱۱/۲۹ ۱۲:۲۶
      protected void Application_Start()
      {
            Stimulsoft.Base.StiFontCollection.AddFontFile(@"fonts\myfonts.ttf");
      }
      جهت Embed کردن فونت در خروجی هایی مثل PDF
  • مهمان در ۱۳۹۳/۰۸/۰۳ ۷:۱۰
    سلام و خسته نباشید
    من هنوز در این بحث گزارش گیری کاملا مبتدی هستم. چون می‌خواستم تازه کارم رو شروع کنم دنبال انتخاب انتخاب نرم افزار مناسب برای گزارشگیری C# در محیط ویندوز بودم. یک سری مطالب کپی شده و تکراری در اینترنت رو دیدم، دوست داشتم نظر تخصصی و شخصی خودتون رو بدونم. من اول دنبال کریستال بودم، ولی بعدش دیدم که ظاهرا استیمول هم نرم افزار معروفیه، میشه کمکم کنید؟
    بی نهایت ممنون از سایت خوبتون
  • گرگین در ۱۳۹۴/۰۴/۲۴ ۹:۹
    سلام، ممنون از مقاله مفیدتون
    من می‌خوام یک گزارش Master-Detail  در wpf  ایجاد کنم.
    با استفاده از روشی که شما گفتید انجام دادم البته با استفاده از لیستی که در برنامه به گزارش می‌فرستم، ولی با خطای parentkey and childkey are identical   مواجه میشه.
    با استفاده از روش Business object  هم گزارش درست کردم ولی فقط master  نمایش داده می‌شه . ممنون می‌شم اگه راهنماییم کنید.
    • رامین علیرضایی در ۱۳۹۴/۰۴/۲۴ ۱۹:۲۴
      سلام.
      اگر امکانش هست فایل طراحی گزارش را جهت بررسی ارسال نمایید.
      خطایی که شما فرمودید مربوط به نوع ساختار دیکشنری گزارش می‌باشد.
      برای رفع آن باید level ارتباط entity‌ها را مشخص نمایید.
      اگر از Business object استفاده کنید ساختار طراحی برای پیاده سازی master-detail مقداری تغییر خواهد کرد.
  • علی اسد در ۱۳۹۵/۱۲/۱۵ ۱۳:۵۸
    با سلام؛ توی استفاده از چارت با زبان فارسی به مشکل خوردم البته نرم افزار تحت وب mvc.نوشته‌ها رو برعکس نشون میده توی چارت وقتی فارسی باشن. خود گزارشات هیچ مشکلی ندارن و فقط توی چارت‌ها مشکل دارن. البته وقتی خروجی pdf میگیری درست هستن ولی توی نمایش نه!