PDA

View Full Version : گزارش گیری توسط StimulSoft که داده ها از join در LINQ بدست می آید



Louai_M
یک شنبه 09 خرداد 1395, 23:48 عصر
با سلام

دوستان من کد زیر را دارم

var query = from r in mydb.tblInvoices
join a in mydb.tblAddInvoices on r.invoice_ID equals a.invadd_invoiceID
join s in mydb.tblStores on a.invadd_storeID equals s.store_ID
join u in mydb.tblUsers on r.invoice_userID equals u.user_ID
where r.invoice_ID == Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value)
orderby r.invoice_ID descending
select new { r.invoice_ID, r.invoice_date, r.invoice_desc, r.invoice_off, r.invoice_tax, u.user_fullname, u.user_address, u.user_tell, s.store_name, a.invadd_price, a.invadd_qulity, a.invadd_stock, a.invadd_sumprice };


می خوام این چند جدول را به stimul برای چاپ منتقل کنم ولی چطور می تونم اینکار انجام بدم چون stimul با هر بار regData فقط نام یک جدول را دریافت می کنه ومن چند جدول را جوین کردم

StiReport rep = new StiReport();
rep.Load(Application.StartupPath + "\\fatcktorprint2.mrt");
rep.Dictionary.Clear();
rep.RegData("tblInvoice", query);

rep.Dictionary.Synchronize();
//rep.Compile();
rep.Show();

davidrobert
دوشنبه 10 خرداد 1395, 09:36 صبح
دوست عزیز اگه شما بخواهید چندین جدوال جون شدن در استیمول نشان بدید مشکلی نیست وقتی شما دارید اطلاعات رو نمایش میدید در دیتگرید ویو تنها کافی است همون مقادیر که در دیتاگرید ویو نشان میدید رو پاس بدید به سمت استیمول چون شما حتما دارید اطلاعات جون رو در یک دیتاگرید ویو نمایش میدید به همین دلیل در یک جدوال استیمول ریپورت میتونید بیارید و نمایش بدید برای گزارش.
این دستور من هستش 2 تا جدوال جون کردم ولی در یک ریپورت که در استیمول هستش درست نشان میدم.
void Prn()
{
try
{
if (dgv1.CurrentRow == null)
{
return;
}
DataTable table = new DataTable("DB_Table");
foreach (DataGridViewColumn column in dgv1.Columns)
{
table.Columns.Add(column.Name, typeof(string));
}
for (int j = 0; j < dgv1.Rows.Count; j++)
{
table.Rows.Add();
for (int k = 0; k < dgv1.Columns.Count; k++)
{
table.Rows[j][k] = dgv1[k, j].Value;
}
}
DataSet ds = new DataSet();
ds.Tables.Add(table);
//StiReport stiReport = StiReport.GetReportFromAssembly(@"Rpt\RptFoctorForoshKala.dll", true);
StiReport stiReport = new StiReport();
stiReport.Load(Application.StartupPath + @"..\Report.mrt");
stiReport.RegData(table);
StiOptions.Viewer.Windows.ShowPageDesignButton = false;
StiOptions.Viewer.Windows.ShowOpenButton = false;
(stiReport.GetComponentByName("TxtDateAndTime") as StiText).Text = "تاريخ و زمان صدور فاکتور : " +
needCode.TimeFull(DateTime.Now) +
" - " +
needCode.dateshort(DateTime.Now);
(stiReport.GetComponentByName("DetialsFull") as StiText).Text = "نام مشتری : " + TxtNameAndLast.Text +
" \n" + LblSum.Text + "\n" + "جمع کل بدهی به حروف : " +
LblSumHorof.Text + " تومان";
stiReport.Design();
stiReport.Show();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

Louai_M
دوشنبه 10 خرداد 1395, 22:45 عصر
سلام

ولی من اطلاعات را از دیتاگرید چاپ نمی کنم مثلا کاربر شماره فاکتور وارد می کنه و می خواد چاپش کنه اونوقت چطور؟

نکته : من از linq استفاده می کنم

aslan
چهارشنبه 12 خرداد 1395, 01:03 صبح
سلام
دوست عزیز - شما میتوانید با هر روشی و از هر منبع داده ای و .... ( که میتواند شامل چندین جدول و .... باشد ) اطلاعات مورد نیازگزارشتون را جمع آوری ( مثلا واکشی اطلاعات از دیتابیس ) و بوسیله یک یا چند دیتاتیبل / دیتاست به استیمول ارسال کنید و ...................
پست شماره 2 نمونه کار خوبی میتونه براتون باشه ( مهم نیست که از دیتاگرید ویو و .... استفاده شده - مهم اینه که اطلاعات مورد نیاز توسط داخل دیتاست ذخیره و به گزارش ارسال شده است )

Louai_M
چهارشنبه 12 خرداد 1395, 19:43 عصر
خب الان من چطور میتونم query که با linq نوشتم را داخل دیتاست بیارم؟
چون با دیتاست مشکلم حل میشه

Mahmoud.Afrad
پنج شنبه 13 خرداد 1395, 01:38 صبح
اصلا نیازی به استفاده از دیتاتیبل و دیتاست نیست. تقریبا همه گزارش سازها از دیتاسورس از نوع Object میتوانند استفاده کنند.

مراحل زیر را دنبال کنید:
1- در برنامه خود، یک کلاس با پراپرتی هایی برای ذخیره مقادیری که جلوی select new نام بردید ایجاد کنید(مثلا نام این کلاس را MyClass میگذاریم)
2- در گزارش خود،(در هنگام طراحی گزارش) یک دیکشنری از نوع BusinessObject ایجاد کنید و ستونهایی را هم نام و هم نوع پراپرتی های کلاسی که در مرحله قبل ایجاد کرده اید(MyClass) به آن اضافه کنید.
3- از روی BusinessObject یک جدول(یا هر چیز دیگری) به گزارش اضافه کنید. دقت کنید خاصیت Business Object جدول از بخش Data (در Properties) به آبجکتی که ایجاد کرده اید متصل باشد
گزارش را ذخیره کنید.
4- در برنامه در جایی که گزارش را ایجاد میکنید، دیتای آماده شده را با متد RegBusinessObject به گزارش ارسال کرده و گزارش را نمایش دهید.

https://www.stimulsoft.com/en/documentation/online/programming-manual/index.html?data_business_objects_in_net_web_silver light.htm
http://www.dotnettips.info/post/1803/%DA%86%DA%AF%D9%88%D9%86%DA%AF%DB%8C-%DA%AF%D8%B2%D8%A7%D8%B1%D8%B4%DA%AF%DB%8C%D8%B1%D B%8C-%D8%A7%D8%B2-business-objects-%D9%85%D8%A7%D9%86%D9%86%D8%AF-list-%D8%AA%D9%88%D8%B3%D8%B7-stimulsoft

Louai_M
یک شنبه 16 خرداد 1395, 17:55 عصر
اصلا نیازی به استفاده از دیتاتیبل و دیتاست نیست. تقریبا همه گزارش سازها از دیتاسورس از نوع Object میتوانند استفاده کنند.

مراحل زیر را دنبال کنید:
1- در برنامه خود، یک کلاس با پراپرتی هایی برای ذخیره مقادیری که جلوی select new نام بردید ایجاد کنید(مثلا نام این کلاس را MyClass میگذاریم)
2- در گزارش خود،(در هنگام طراحی گزارش) یک دیکشنری از نوع BusinessObject ایجاد کنید و ستونهایی را هم نام و هم نوع پراپرتی های کلاسی که در مرحله قبل ایجاد کرده اید(MyClass) به آن اضافه کنید.
3- از روی BusinessObject یک جدول(یا هر چیز دیگری) به گزارش اضافه کنید. دقت کنید خاصیت Business Object جدول از بخش Data (در Properties) به آبجکتی که ایجاد کرده اید متصل باشد
گزارش را ذخیره کنید.
4- در برنامه در جایی که گزارش را ایجاد میکنید، دیتای آماده شده را با متد RegBusinessObject به گزارش ارسال کرده و گزارش را نمایش دهید.

https://www.stimulsoft.com/en/documentation/online/programming-manual/index.html?data_business_objects_in_net_web_silver light.htm
http://www.dotnettips.info/post/1803/%DA%86%DA%AF%D9%88%D9%86%DA%AF%DB%8C-%DA%AF%D8%B2%D8%A7%D8%B1%D8%B4%DA%AF%DB%8C%D8%B1%D B%8C-%D8%A7%D8%B2-business-objects-%D9%85%D8%A7%D9%86%D9%86%D8%AF-list-%D8%AA%D9%88%D8%B3%D8%B7-stimulsoft




با تشکر
مشکلم حل شد،

دقیقا روش شما رو استفاده کردم بدون استفاده از کلاس فقط نتیجه query را درون regbusinessobject ریختم


var query = (from r in mydb.tblInvoices
join a in mydb.tblAddInvoices on r.invoice_ID equals a.invadd_invoiceID
join s in mydb.tblStores on a.invadd_storeID equals s.store_ID
join u in mydb.tblUsers on r.invoice_userID equals u.user_ID
where r.invoice_ID == Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value)
orderby r.invoice_ID descending
select new { r.invoice_ID, r.invoice_date, r.invoice_desc, r.invoice_off, r.invoice_tax, u.user_fullname, u.user_address, u.user_tell, s.store_name, a.invadd_price, a.invadd_qulity, a.invadd_stock, a.invadd_sumprice }).ToList();

// show report
StiReport rep = new StiReport();
reportfactorClass.factor repfact = new reportfactorClass.factor();
rep.RegBusinessObject("reportfactorClass",query);
rep.Load(Application.StartupPath + "\\fatcktorprint.mrt");
rep.Dictionary.Clear();
rep.Show();

Louai_M
یک شنبه 16 خرداد 1395, 17:56 عصر
خب الان

جمع را تو stimul می دونم چطوری فقط ضرب، تفریق ، تقسیم چطوری انجام میشن؟