PDA

View Full Version : ارسال کوئری ها به کریستال ریپورت با entity framework



csharpprogramer88
یک شنبه 27 مرداد 1392, 22:53 عصر
سلام

دوستان من گزارش خودمو توی محیط کریستال ریپورت طراحی کردم حالا میخواام یک کوئری را به کریسیتال ریپورت ارسال کنم با ADO براحتی اینکار را رانجام میدادم ولی با EF مشکل دارم.

http://barnamenevis.org/showthread.php?359573-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%AF%D8%B2%D8%A7%D8%B1%D8%B4-%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A8%D8%A7-entity-framework&highlight=%D8%A2%D9%85%D9%88%D8%B2%D8%B4+ado



این تاپیک هم مطالعه کردم ولی مشکلم حل نشد

چطوری باید یک کوئری را با EF به کریستال ریپورت بفرستم؟

esafb52
یک شنبه 27 مرداد 1392, 23:51 عصر
دوست عزیز کریستال ریپورت یه منبع داده میخواد حالا میخوای یه دیتاتیبل باشه یا یک کوئری باشه مثلا شما چطور اطلاعاتت رو گرید لود میکنی این هم همونه فقط یه چند تا مرحله ساده داره که سرچ کنی فراوانه ضمنا قرار شد دیتابیس رو بذاری خوخان یه نمونه برات بذاره!!!!!

mousa1992
دوشنبه 28 مرداد 1392, 00:08 صبح
سلام
کدهایی که نوشتی قرار بده دوستان ببینن و در مورد نحوه انجام کارت هم توضیح بده

esafb52
دوشنبه 28 مرداد 1392, 00:19 صبح
من یهنمونه ساده میذارم شما اول یه سند کریستا اضافه کن و جدولت و فیلدهات رو انتخاب کن بعد هم یه فرم جدید و یه کریستا ریپورت ویور بهش اضافه کن و تو روال لودش یه کدی مثل این بنویس
using (fuleEntities1 fule = new fuleEntities1())
{
try
{
var data = fule.Table1.ToList();
ReportDocument rd = new ReportDocument();
rd.Load("CrystalReport1.rpt");
rd.SetDataSource(data);
crystalReportViewer1.ReportSource = rd;
crystalReportViewer1.Show();
}
catch (Exception exception)
{

MessageBox.Show(exception.Message) ;
}
}
برای گزارش های سفارشی کوئری دلخواهت رو بنویس

csharpprogramer88
دوشنبه 28 مرداد 1392, 07:40 صبح
من یهنمونه ساده میذارم شما اول یه سند کریستا اضافه کن و جدولت و فیلدهات رو انتخاب کن بعد هم یه فرم جدید و یه کریستا ریپورت ویور بهش اضافه کن و تو روال لودش یه کدی مثل این بنویس
using (fuleEntities1 fule = new fuleEntities1())
{
try
{
var data = fule.Table1.ToList();
ReportDocument rd = new ReportDocument();
rd.Load("CrystalReport1.rpt");
rd.SetDataSource(data);
crystalReportViewer1.ReportSource = rd;
crystalReportViewer1.Show();
}
catch (Exception exception)
{

MessageBox.Show(exception.Message) ;
}
}
برای گزارش های سفارشی کوئری دلخواهت رو بنویس

تشکر از پاسخ شما



DB_Entities1 fule = new DB_Entities1();

try
{
var data = fule.tbl_kharid.ToList();
ReportDocument rd = new ReportDocument();
rd.Load("CrystalReport2.rpt");
rd.SetDataSource(data);
crystalReportViewer1.ReportSource = rd;
crystalReportViewer1.Show();
}
catch (Exception exception)
{

MessageBox.Show(exception.Message);
}


یه فرم جدید ساختم و در فرم اولی یه دگمه گذاشتم و فرم گزارشمو فراخوانی کردم کد بالا را در لود فرم گزارش نوشتم در فرم گزارش یک crystalReportViewer1 گذاشتم ولی ارور زیر را میده

khokhan
دوشنبه 28 مرداد 1392, 08:17 صبح
تشکر از پاسخ شما



DB_Entities1 fule = new DB_Entities1();

try
{
var data = fule.tbl_kharid.ToList();
ReportDocument rd = new ReportDocument();
rd.Load("CrystalReport2.rpt");
rd.SetDataSource(data);
crystalReportViewer1.ReportSource = rd;
crystalReportViewer1.Show();
}
catch (Exception exception)
{

MessageBox.Show(exception.Message);
}


یه فرم جدید ساختم و در فرم اولی یه دگمه گذاشتم و فرم گزارشمو فراخوانی کردم کد بالا را در لود فرم گزارش نوشتم در فرم گزارش یک crystalReportViewer1 گذاشتم ولی ارور زیر را میده
بهترین کا اینه که یه لیست درست کنین و بعد از پر کردن لیست از محتویات جدول مورد نظر اونو به گزارش پاس بدین یه چیزی شبیه این :


private void button4_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
CrystalReport1 _Rpt = new CrystalReport1();

List<k_info> list_Test = new List<k_info>();
using (kalaEntities _tempdbEntities = new kalaEntities())
{
list_Test = _tempdbEntities.k_info.ToList();
}

_Rpt.SetDataSource(list_Test);
f2.crystalReportViewer1.ReportSource = _Rpt;
f2.crystalReportViewer1.RefreshReport();
}

csharpprogramer88
دوشنبه 28 مرداد 1392, 08:20 صبح
دوست عزیز میشه با EF مثال بزنی؟ چون من ef تازه کارمممممممم

khokhan
دوشنبه 28 مرداد 1392, 08:48 صبح
دوست عزیز میشه با EF مثال بزنی؟ چون من ef تازه کارمممممممم
این نمونه رو با گزارش ساز rdlc کار کردم و با همون شیوه ارسال لیست صورت می گیرد
مطمئن باش کریستال هم به همین ترتیبه با یه کم تغییرات می شه با کریستال هم انجام داد

csharpprogramer88
دوشنبه 28 مرداد 1392, 08:55 صبح
این نمونه رو با گزارش ساز rdlc کار کردم و با همون شیوه ارسال لیست صورت می گیرد
مطمئن باش کریستال هم به همین ترتیبه با یه کم تغییرات می شه با کریستال هم انجام داد



list_Test = _tempdbEntities.k_info.ToList();

اینجا شما داری اطلاعات جدول را در یه لیست میریزید؟

اصلا چرا لیست؟

khokhan
دوشنبه 28 مرداد 1392, 09:11 صبح
بزارین یه توصیه براتون بکنم
اگه با ef کار می کنین و اگه ورژن vs تون 2010 هستش و باز اگه کریستال ریپورتتون ورژن آپدیت شده نباشه بنابراین دچار مشکل خواهید شد چون کریستال نسخه پایین با entity fremwork 4 کار نمی کنه
یا اینکه باید entity fremwork پروژه رو روی ورژن3 یا 3.5 ست کنین که در این صورت هم با ef دچار مشکل می شوید
پس بهتره از گزارش ساز Stimulsoft Reports استفاده کنین

csharpprogramer88
دوشنبه 28 مرداد 1392, 09:31 صبح
یعنی ارور پست 5 بخاطر اختلاف ورژن هاست؟

esafb52
دوشنبه 28 مرداد 1392, 13:14 عصر
شما این رو قبل از خط آخر appconfig اضافه کن ببین چی میشه؟!!
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>

csharpprogramer88
دوشنبه 28 مرداد 1392, 13:17 عصر
شما این رو قبل از خط آخر appconfig اضافه کن ببین چی میشه؟!!
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>

به خط آخر اضافه کردم ارور میده

mousa1992
دوشنبه 28 مرداد 1392, 13:41 عصر
پارامتری که به متد load


rd.Load("CrystalReport2.rpt");


میفرستی یا باید ادرس کامل فایل کریستال باشه و یا فایل کریستال رو کنار exe برنامه قرار بدی

csharpprogramer88
دوشنبه 28 مرداد 1392, 14:20 عصر
پارامتری که به متد load


rd.Load("CrystalReport2.rpt");


میفرستی یا باید ادرس کامل فایل کریستال باشه و یا فایل کریستال رو کنار exe برنامه قرار بدی

توی مسیر bin/debug گذاشتم ولی ارور زیر را میده

khokhan
دوشنبه 28 مرداد 1392, 14:30 عصر
توی مسیر bin/debug گذاشتم ولی ارور زیر را میده
البته این ارور ربطی به فایل کریستال نداره ومربوط می شه به نحوه مقدار دهی دیتاتیبل داخل دیتاست
واما بعد...
از کدوم ورژن کریستال استفاده می کنی منظورم اینه که توی framweork4 مشکل نداره ؟
اصلا دیتاست توی پروژه تون بکار بردین ؟
فیلدهای گزارشتون رو قبل از اینکه در فرم مربوطه فراخوانی بشن از کدوم دیتاتیبل مقدار دهی کردین ؟

csharpprogramer88
دوشنبه 28 مرداد 1392, 15:29 عصر
من با ef کار کردم

کریستال 2013

esafb52
دوشنبه 28 مرداد 1392, 16:50 عصر
این یه نمونه دان (http://esafb52.persiangig.com/other/testef.rar/download)
من کریستال ام 2010 هست و با دات نت فزیم ورک 4
برای سازگاری با فریم ورک 4 کافیه این رو تو فایل app.config اضافه کنی
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>

khokhan
دوشنبه 28 مرداد 1392, 17:34 عصر
این یه نمونه دان (http://esafb52.persiangig.com/other/testef.rar/download)
من کریستال ام 2010 هست و با دات نت فزیم ورک 4
برای سازگاری با فریم ورک 4 کافیه این رو تو فایل app.config اضافه کنی
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>


با سلام
آقای esafb52 عزیز این که شد همون لیستی که من صبح پیشنهاد دادم وایشون قبول نکردند :ناراحت:


List<Table1> data = new List<Table1>();
using (Database1Entities fule = new Database1Entities())
{
try
{

data = fule.Table1.ToList();
ReportDocument rd = new ReportDocument();
rd.Load("CrystalReport2.rpt");
rd.SetDataSource(data);
crystalReportViewer1.ReportSource = rd;
crystalReportViewer1.Show();
}
این دوستمون می خواهند با همون کد پست 5 گزارششون رو درست کنند :لبخند:

esafb52
دوشنبه 28 مرداد 1392, 17:50 عصر
با سلام
آقای esafb52 عزیز این که شد همون لیستی که من صبح پیشنهاد دادم وایشون قبول نکردند :ناراحت:


List<Table1> data = new List<Table1>();
using (Database1Entities fule = new Database1Entities())
{
try
{

data = fule.Table1.ToList();
ReportDocument rd = new ReportDocument();
rd.Load("CrystalReport2.rpt");
rd.SetDataSource(data);
crystalReportViewer1.ReportSource = rd;
crystalReportViewer1.Show();
}
این دوستمون می خواهند با همون کد پست 5 گزارششون رو درست کنند :لبخند:
دقیقا جناب استاد خوخان عزیز ولی با اون خطوط مشکل کریستا برای دات نت 4 حل شد

khokhan
دوشنبه 28 مرداد 1392, 18:22 عصر
دقیقا جناب استاد خوخان عزیز ولی با اون خطوط مشکل کریستا برای دات نت 4 حل شد
این هم نمونه پیشنهادی من :لبخند:
پروژه ef قبلی منتهی این بار با کریستال واما نه با لیست که از طریق کلک مرغابی اون هم از نوع زیر آبی :قهقهه:
قبل از اجرای پروژه فایل دیتابیس رو از پوشه DB داخل پوشه debug کپی کنید