نمایش نتایج 1 تا 1 از 1

نام تاپیک: گزارش گیری از لیستی از آبجکتها در کریستال ریپورت (Entity Framework و LinqToSql و هر لیستی از اشیاء)

  1. #1

    گزارش گیری از لیستی از آبجکتها در کریستال ریپورت (Entity Framework و LinqToSql و هر لیستی از اشیاء)

    سلام
    در این تاپیک به گزارش گیری در کریستال ریپوتز که دیتاسورس آن لیستی از اشیاء است می پردازیم.


    فرض کنید کلاسی به صورت زیر داریم

    class ReportModel
    {
    public string PersonName { get; set; }
    public string GroupName { get; set; }
    }

    میخواهیم از لیستی از این کلاس در کریستال ریپوتز گزارش تهیه کنیم.

    1- از طریق منوی Project>>Add New Item یک گزارش کریستال ریپوتز(.rpt) به پروژه اضافه کنید.

    2- در پنجره ظاهر شده نوع گزارش را انتخاب و next را انتخاب کنید.
    Crystal Reports Gallery.PNG

    3- در پنجره جدید باید دیتاسورس را تعیین کنید. از Project Data ، زیر شاخه .Net Objects را گسترش دهید. حال از گره های آن ، کلاس مورد نظر را انتخاب کرده و اضافه کنید و با next به مرحله بعد بروید.
    Crystal Reports Choose the data you want to report on.PNG

    4- حال باید پراپرتی هایی که میخواهید در گزارش باشند را انتخاب و اضافه کنید.
    Crystal Reports Choose the information to display on the report.PNG

    5- مراحل بعدی طبق خواست شماست و از آن میگذریم و در آخر finish میکنیم.

    6- در فرمی که میخواهیم گزارش نمایش داده شود(FrmReport) یک CrystalReportViewer اضافه کرده در همین فرم یک متد با سطح دسترسی مناسب ایجاد میکنیم. پارامتر ورودی این متد از نوع گزارشی است که قصد نمایش در این فرم را داریم.

    internal void InitializeReportViewer(CrystalReport1 report)
    {
    this.crystalReportViewer1.ReportSource = report;
    }



    7- حالا در جایی که میخواهیم فرم گزارش را ایجاد کنیم باید ابتدا دیتاسورس که لیستی قابل شمارش از کلاس ReportModel است را داشته باشیم. فرقی نمیکنید این لیست چگونه تهیه میشود. میتوان در LinqToSql و یا EntityFramework دیتا را دریافت کرده و در سلکت، شئ جدیدی از کلاس ReportModel ایجاد و مقداردهی کنیم.

    سه جدول زیر را در نظر بگیرید:
    Person --> Id , Name
    Group --> Id , Name
    PersonInGroup --> Id , PersonId , GroupId
    که در جدول PersonInGroup عضویت هر شخص در گروه های مختلف مشخص است. حال کوئری روی PersonInGroup مینویسیم که نام شخص و گروه هایی که در آن عضویت دارد را بدست آورد. هنگام سلکت، شئ جدیدی از ReportModel ایجاد میکنیم و پراپرتی های آن را مقداردهی میکنیم. (مدل توسط LinqToSql ساخته شده)

    DataClasses1DataContext db = new DataClasses1DataContext();

    var data =
    (
    from pg in db.PersonInGroups
    select new ReportModel
    {
    PersonName = pg.Person.Name,
    GroupName = pg.Group.Name
    })
    .Union(
    from p in db.Persons
    where !p.PersonInGroups.Any()
    select new ReportModel
    {
    PersonName = p.Name,
    GroupName = "------------------"
    });


    سپس یک شئ از گزارش کریستال ریپورتز ایجاد کرده و توسط متد SetDataSource لیست data را به آن پاس میدهیم.

    CrystalReport1 report = new CrystalReport1();
    report.SetDataSource(data);


    در انتها فرم گزارش را ایجاد کرده و شئ گزارش را توسط متد InitializeReportViewer در reportviewer ست میکنیم و بعد فرم را نمایش میدهیم.

    FrmReport frm = new FrmReport();
    frm.InitializeReportViewer(report);
    frm.ShowDialog();






    نکته اینکه اگر خصوصیت Nullable تمام ستون های جدول مورد نظر false باشد و در سلکت نیازی به new کردن نیاشد، نیازی به کلاس واسطه ReportModel نیست و در مرحله 3 میتوان کلاسی که از روی جدول ایجاد شده است را به عنوان دیتاسورس انتخاب کنید. در این حالت نباید جلوی select شئ جدیدی new کنید.


    نمونه پروژه را میتوانید دانلود کنید. (دات نت 3.5 و کریستال ریپورتز 13 و LinqToSql)
    فایل های ضمیمه فایل های ضمیمه

تاپیک های مشابه

  1. مبتدی: نحوه گزارش گیری براساس رکورد های خاص با کریستال در سی شارپ
    نوشته شده توسط mortezasar در بخش C#‎‎
    پاسخ: 6
    آخرین پست: شنبه 17 فروردین 1392, 20:21 عصر
  2. گزارش گیری از چند جدول با یک کریستال ریپورت
    نوشته شده توسط negar.rafie در بخش C#‎‎
    پاسخ: 1
    آخرین پست: یک شنبه 27 فروردین 1391, 13:38 عصر
  3. سوال: چند سوال برای گزارش گیری در ویژوال بیسیک با کمک کریستال ریپورت
    نوشته شده توسط sajad_boj71 در بخش ابزارهای گزارشگیری در VB6
    پاسخ: 2
    آخرین پست: جمعه 21 آبان 1389, 18:25 عصر
  4. گزارش گیری از چند جدول در یک صفحه ریپورت
    نوشته شده توسط abdollahkochy در بخش ابزارهای گزارش سازی در دلفی
    پاسخ: 7
    آخرین پست: سه شنبه 16 تیر 1388, 13:10 عصر
  5. ایجاد گزارش دینامیک در زمان اجرای برنامه با کریستال ریپورت
    نوشته شده توسط iman_tavajoh در بخش ابزارهای گزارش سازی
    پاسخ: 0
    آخرین پست: جمعه 20 دی 1387, 15:15 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •