PDA

View Full Version : سوال: گزارش گیری در وب



Mohandes2009
شنبه 01 آبان 1389, 20:39 عصر
دوستان من مبتدی هستم تو وب می خواستم گزارش گیری را بدونم چجوری است نیاز دارم:اشتباه:اگه میشه لطف کنید یا آموزشش را بزارید از ابتدا یا ی لینک خوب معرفی کنید:بوس:
اگه با نرم افزاری بجز کریستال ریپورت هم هست که بهتره بگید


"خواهشا نگید ی سرچ بزن چون هر چی زدم تو سایت چیزی بدرد بخوری نیافتم همه لینک دادن یا گفتن ی سرچ میزدی !! شایدم من بد سرچ زدم"

majnun
یک شنبه 02 آبان 1389, 01:36 صبح
add new item / Report.rdlc

برای نمایشش هم از ReportViewer استفاده کن

یه سرچ بزنی اطلاعات زیادی در موردش هست

اگه سرچ زدی سرچ زدی سرچ زدی نبود بگو من یه مثال برات بنویسم ....

majnun
یک شنبه 02 آبان 1389, 02:00 صبح
بیا داداش خودم واست نوشتم حال کنی

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

به باک وصل کردنش کار خودت .....

Mohandes2009
یک شنبه 02 آبان 1389, 05:02 صبح
add new item / Report.rdlc

برای نمایشش هم از ReportViewer استفاده کن

یه سرچ بزنی اطلاعات زیادی در موردش هست

اگه سرچ زدی سرچ زدی سرچ زدی نبود بگو من یه مثال برات بنویسم ....
دوست عزیز مرسی از مثال خوبت

ولی می شه یه لینک آموزشی از کلیه امکانات این گزارش گیری را بزاری من هر چی سرچ میکنم چیز خوبی بدست نمیارم یا در مورد کریستال ریپورت هست!:ناراحت:

majnun
یک شنبه 02 آبان 1389, 06:59 صبح
چشم دوست عزیز بزودی اموزش کار باهاش رو برات میزارم ... تا امشب صبر کن اگه عجله نداری ...

Mohandes2009
دوشنبه 03 آبان 1389, 18:25 عصر
چشم دوست عزیز بزودی اموزش کار باهاش رو برات میزارم ... تا امشب صبر کن اگه عجله نداری ...
چی شد مهندس یادت رفت؟:اشتباه:

majnun
دوشنبه 03 آبان 1389, 19:01 عصر
شرمنده کمی سرم شلوغ بود
در حال بهبود بخشیدن وبلاگ یکی از شعرای ایرانی و دانشگاه و ....

انشاالله به زودی میزارم

Kia_MLS
دوشنبه 03 آبان 1389, 19:25 عصر
سلام
دوست عزیز، اگه میخوای گزارشات استاتیک در وب طراحی کنی که کار خیلی سادست
منظور از گزارش استاتیک اینه که تعداد فیلدهایی که در خروجی میاد ثابته، فیلدهای گروه بندی، صفحه بندی و ... از قبل مشخصه
این کارها رو با rdlc به سادگی میشه انجام داد
روش کار طبق فرمایش دوستمون Add/New item قسمت Reporting در نهایت Report Wizard رو انتخاب کن
برای شروع با ویزارد کار کن بعد که پیش رفتی میتونی به سادگی گزارشاتتو خودت از ابتدا طراحی کنی
بعد از اینکه نام فایل گزارشتو وارد کردی فرم های ویزارد ظاهر میشن که توضیح خاصی نداره و همه چیز واضح هستش اما برای اطلاع بیشتر در صفحه اول Datasource رو انتخاب میکنی، در صفحه بعد نحوه ظاهر شدن گزارش رو انتخاب کرده، در صفحه بعد فیلدهایی که جهت نمایش، گروه بندی و صفحه بندی هستند رو انتخاب میکنی
در صفحه بعد نحوه نمایش گروه بندی و صفحه بندی گزارش رو تعیین میکنی و در نهایت استایل گزارش رو انتخاب میکنی
به همین سادگی یک گزارش رو طراحی کردی
اگه مشکلی داشتی بگو
موفق باشی

Kia_MLS
دوشنبه 03 آبان 1389, 19:41 عصر
اوه، يادم رفت بگم چطوري گزارشي كه طراحي كردي رو نشون بدي :لبخند:
توي صفحه اي كه ميخواي گزارشتو نمايش بدي يك كنترل MicrosoftReportViewer بنداز
اين كنترل در تب Reporting قرار داره
بعد خاصيت LocalReport‌ رو انتخاب كن و از خصوصيت هاي اون خاصيت ReportPath رو مقدار بده
به عنوان مثال: report1.rdlc
حالا بايد اطلاعات رو به ReportViewer بفرستي و گزارشتو نمايش بدي
يك دكمه روي فرمت بزار و كد ژشت دكمه رو به صورت زير بنويس:



var q = your query result;
Microsoft.Reporting.WebForms.ReportDataSource ds = new Microsoft.Reporting.WebForms.ReportDataSource("YourDatasourceName", q);
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(ds);

ReportViewer1.DataBind();



فقط دقت كن كه به جاي YourDatasourceName نام همون DataSource اي رو بنويسي كه در زمان طراحي گزارشت با ويزارد انتخاب كردي
متغير q هم كه نتيجه يك query از ديتابيست هست

موفق باشي

majnun
دوشنبه 03 آبان 1389, 20:08 عصر
داداش الوعده وفا

این مثال رو ببین خودت به بانک وصلش کن دیگه
الانم دارم آموزشش رو میسازم میزارم

majnun
دوشنبه 03 آبان 1389, 20:36 عصر
این آموزشش خدمت دوست عزیزم


ابتدا باید یه فایل Report.rdlc به برنامه اضافه کنیم
خب حالا بازش کنید
از منوی website Datasuorces گزینه add news darasuorce را انتخاب کنید
خب الان یه فایل DataSet1.xsd به برنامه شما اضافه میشه
حالا برید بازش کنید:
روی صفحه خالی راست کلیک کنید و add و بعدش datatabel را انتخاب کنید
اینجا بیاین فیلدهای جدول بانک خودتون رو اینجا وارد کنید + فیلد کلید را در صورت وجود انتخاب کنید
خب حالا بیاین درون صفحه ای که میخواد گزارش نشن داده بشه یک ReportViewer قرار بدین
درون pgeload این کدها رو بنویسید
برای ارسال پارامتر به درون گزارش (برای گزارش هایی که نیاز به یک رکورد میباشد نیازی به دیتاسورس نیست میتونید بوسیله پارامتر مقدار ها را به گزارش بدین )
به این صورت


string name = "name";
String mobile = "mobile";
List<ReportParameter> Prep = new List<ReportParameter>();

Prep.Add(new ReportParameter("txt1", name));
Prep.Add(new ReportParameter("txt2", mobile));
ReportViewer1.LocalReport.ReportPath = Server.MapPath("test.rdlc");
ReportViewer1.LocalReport.SetParameters(Prep);



در صورتی که میخواین چندین فیلد درون بانک را به صورت جدول قرار بدین :
از این کد به DataTable1 که درون DataSet1 ایجاد کردین مقدار بدین (میتونید به بانک وصل کنید در حلقه تکرار مقدار دهی کنید )



DataSet1 ds = new DataSet1();//
ds.DataTable1.AddDataTable1Row("1", "rezaiy", "0935", "ali");
ds.DataTable1.AddDataTable1Row("2", "rezaiy", "0935", "ali");
ds.DataTable1.AddDataTable1Row("3", "rezaiy", "0935", "ali");
ds.DataTable1.AddDataTable1Row("4", "rezaiy", "0935", "ali");


و سپس DataTable1 را به گزارش اتصال بدین


rds.Name = "DataSet1_DataTable1";
rds.Value = ds.Tables[0];
ReportViewer1.LocalReport.DataSources.Add(rds);



برای نمایش یک پارامتر درون گزارش از تکست باکس استفاده کنید و خاصیت value را برابر پارامتر قرار دهید به این صورت :


=Parameters!txt1.Value


برای نمایش لیستی از داده ها که درون دیتاتیبل ریختین از یک حدول استفاده کنید از منوی website Datasuorce فیلد مورد نظر را کشیده و درون بخش detail رها کنید

برای اینکه پارامتر ارسال کنید 1 کار دیگه هم باید انجام بدین اونم اینه که پارامتری که ارسال میکنیم در حقیقت به پارامترهای گزارش مقدار میفرستیم پس باید برای گزارش یه پارامتر بسازیم برای اینکار

روی بخش خاکستری گزارش راست کلیک کنید

Report Parameter
را بزنید

حالا یه صفحه باز میشه که شما باید درونش پارامتر ها را Add کنید و نوعش و نامش رو مشخص کنبد
توجه کنید در این خط کد

Prep.Add(new ReportParameter("txt2", mobile));



txt2 نام یک پارامتر است

توضیح بیشتر خواستین امر کنید در خدمتم

majnun
پنج شنبه 06 آبان 1389, 00:13 صبح
به درخواست دوستان (نظرخصوصی +ایدی و ... ) این برنامه رو به یه بانک وصل کردم میدم خدمتتون

امیدوارم بدرتون بخوره

این کدش :


using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;
using Microsoft.Reporting.WebForms;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DataSet1 ds = new DataSet1();//

//////////
//کانکشن استرینگ
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Majn oon\Documents\Visual Studio 2008\WebSites\report\App_Data\Database.mdf;Integra ted Security=True;User Instance=True");
//معرفی نام استوردپروسیجر به اس کیو ال کامند
SqlCommand cmd = new SqlCommand("Select_booknumber", con);
//نوع اس کیو ال کامند از نوع استوردپروسیجر باشد
cmd.CommandType = CommandType.StoredProcedure;
//معرفی کانکشن به اس کیو ال کامند
cmd.Connection = con;
//کانکت شدن به دیتابیس
con.Open();
// تعریف متغیری از نوع اس کیو ال دیتا ریدر
SqlDataReader dr;
//اطلاعات را بخوان و درون متغیر بریز
dr = cmd.ExecuteReader();
//اگر بانک مقداری نداشت یا دستور مقداری برنگرداند کانکشن بسته شود
if (!dr.HasRows)
{
dr.Close();

}
else
{
//تا زمانی که میتونی بخون
while (dr.Read())
{
// ریختن اطلاعات دیتابیس درون دیتا تیبل درون دیتاست
string id=dr.GetInt32(0).ToString();
string age=dr.GetInt32(3).ToString();
ds.DataTable1.AddDataTable1Row(id, dr.GetString(2), dr.GetString(1)
,dr.GetString(4),age);
}
dr.Close();

}

////////////////
List<ReportParameter> Prep = new List<ReportParameter>();
//ارسال مقدار به پارامتر های دورن فایل ریپورت
Prep.Add(new ReportParameter("nameheader", "نام"));
Prep.Add(new ReportParameter("lnameheader", "نام خانوادگی"));
Prep.Add(new ReportParameter("mobileheader", "موبایل"));
Prep.Add(new ReportParameter("ageheader", "سن"));
ReportDataSource rds = new ReportDataSource();
rds.Name = "DataSet1_DataTable1";
rds.Value = ds.Tables[0];
// اتصال ریپورت ویوور به فایل گزارش
ReportViewer1.LocalReport.ReportPath = Server.MapPath("test.rdlc");
// معرفی پارامترها به فایل ریپورت
ReportViewer1.LocalReport.SetParameters(Prep);
// معرفی دیتاست به فایل ریپورت
ReportViewer1.LocalReport.DataSources.Add(rds);

}
}




در ضمیمه برنامه هست فقط کانکشن استرینگ عوض شود...

aserfg
پنج شنبه 06 آبان 1389, 08:18 صبح
سلام majnun (http://www.barnamenevis.org/forum/member.php?u=116815) عزیز
من برای تست این که روی سرور هم درست جواب می ده یا نه اون رو توی ساب دمین سایتم ریختم ولی گویا اسمبلی مربوطه رو سرور نمی شناسه . که علتش عدم توانایی لود اسمبلی مربوطه است که در توضیح گفته باید رجیستری رو تغییر بدیم ولی روی سرور که همچین امکانی نیست ؟ راه حل...؟؟؟
با این ادرس مراجعه نمایید :

http://forum.persianarticle.org

Mohandes2009
پنج شنبه 06 آبان 1389, 09:38 صبح
سلام مجنون کد من اینه که نوشتم :



public DataClassesDataContext linq = new DataClassesDataContext();
protected void Page_Load(object sender, EventArgs e)
{
var k = from c in linq.TManegePeopels
select c;
string[] Tabel = new string[5];
List<ReportParameter> Prep = new List<ReportParameter>();
foreach (TManegePeopel item in k)
{
Tabel[0] = item.Name.ToString();
Tabel[1] = item.Famil.ToString();
Tabel[2] = item.Sex.ToString();
Tabel[3] = item.Tel.ToString();
Tabel[4] = item.Address.ToString();
}
Prep.Add(new ReportParameter("Name", Tabel[0].ToString()));
Prep.Add(new ReportParameter("Famil", Tabel[1].ToString()));
Prep.Add(new ReportParameter("Sex", Tabel[2].ToString()));
Prep.Add(new ReportParameter("Tel", Tabel[3].ToString()));
Prep.Add(new ReportParameter("Add", Tabel[4].ToString()));
ReportDataSource rds = new ReportDataSource();
rds.Name = "TManegePeopel";
rds.Value = Tabel;

ReportViewer1.LocalReport.ReportPath = Server.MapPath("Report.rdlc");
ReportViewer1.LocalReport.SetParameters(Prep);
ReportViewer1.LocalReport.DataSources.Add(rds);
}


توی این خط :


ReportViewer1.LocalReport.SetParameters(Prep);

ارور زیر را میده :


An error occurred during local report processing.

واسه چی هست این ارور؟:اشتباه:

majnun
پنج شنبه 06 آبان 1389, 10:17 صبح
توی این خط :

کد PHP:
ReportViewer1.LocalReport.SetParameters(Prep);
ارور زیر را میده :

An error occurred during local report processing.

واسه چی هست این ارور؟


شما پارامتر ها را در گزارش ایجاد کردین ؟؟

توضیح دادم
فایل ریپورت را باز کنید

از منوی report گزینه ی ReportParameters را انتخاب کنید و در اینجا به تعداد پارامتری که میخواهید پارامتر تعریف کنید .

majnun
پنج شنبه 06 آبان 1389, 10:20 صبح
سلام majnun (http://www.barnamenevis.org/forum/member.php?u=116815) عزیز
من برای تست این که روی سرور هم درست جواب می ده یا نه اون رو توی ساب دمین سایتم ریختم ولی گویا اسمبلی مربوطه رو سرور نمی شناسه . که علتش عدم توانایی لود اسمبلی مربوطه است که در توضیح گفته باید رجیستری رو تغییر بدیم ولی روی سرور که همچین امکانی نیست ؟ راه حل...؟؟؟
با این ادرس مراجعه نمایید :

http://forum.persianarticle.org

خودم تا حالا با این مشکل روبرو نشدم :خجالت:
راستش جواب دقیقشو نمیدونم نمیخوام بیشتر گمراهت کنم

اینجا رو ببین :

http://social.msdn.microsoft.com/Forums/en/vsreportcontrols/thread/8898e57f-7455-4f50-892e-f4d894e94987

aserfg
پنج شنبه 06 آبان 1389, 13:02 عصر
جناب مجنون تا حالا روی هاست از گزارش استفاده کردی؟

majnun
پنج شنبه 06 آبان 1389, 13:09 عصر
جناب مجنون تا حالا روی هاست از گزارش استفاده کردی؟


نه عزیز من تمام گزارش هایی که استفاده کردم در برنامه های لوکال بوده ...

به همین دلیل جواب این سوالتون رو نمیدونم
از اساتید کسی نمیدونه این مشکل چجوری حل میشه ؟؟

Mohandes2009
پنج شنبه 06 آبان 1389, 20:25 عصر
شما پارامتر ها را در گزارش ایجاد کردین ؟؟

توضیح دادم
فایل ریپورت را باز کنید

از منوی report گزینه ی ReportParameters را انتخاب کنید و در اینجا به تعداد پارامتری که میخواهید پارامتر تعریف کنید .
آره بابا ایجاد کردم که !!

majnun
جمعه 07 آبان 1389, 00:12 صبح
آره بابا ایجاد کردم که !!

بعد از دیدن پروژه شما :

مشکل در نام پارامتر آدرس هستش ...
add باید به addres تغییر کنه ....

Mohandes2009
جمعه 07 آبان 1389, 08:58 صبح
بعد از دیدن پروژه شما :

مشکل در نام پارامتر آدرس هستش ...
add باید به addres تغییر کنه ....

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



A data source instance has not been supplied for the data source 'sp_TManegePeopel_SelectAllResult'.

عبارت 'sp_TManegePeopel_SelectAllResult' اسم استورپروسیجر SelectAll از جدولی است بنام TManegePeopel که دارم فیلدهاشا برای گزارش درست کردن می خونم .

اینم عکس که در ضمیمه هست.

majnun
جمعه 07 آبان 1389, 09:02 صبح
A data source instance has not been supplied for the data source 'sp_TManegePeopel_SelectAllResult'.


این خطا برای اینه که دیتاست ی که به گزارش نصب میدین رکوردی درون خودش نداره ....

شما در این کد دیتا سورس را به گزارش وصل میکنید اما قبل از اون باید دیتاست شما دارای اطلاعات باشد ...


ReportDataSource rds = new ReportDataSource();
rds.Name = "TManegePeopel";
rds.Value = Tabel;


به پست شماره 12 همین تاپیک نگاه کن
اول اطلاعات جدول بانک اطلاعاتی را درون دیتاست ریختم بعد اونو به گزارش وصل کردم

z_software
چهارشنبه 19 آبان 1389, 09:35 صبح
سلام
ممنون از توضیحاتتون ، یه سوال من از vs2008 استفاده میکنم از قسمت Add/NewItem/ReaportingWizard که رفتم به انتخاب جداول و...که رسید جدولم را انتخاب کردم ولی دکمه Next غیر فعال است ، نمیدونم چرا لطفاً راهنمایی کنید چرا اینجوری میشه؟ ممنون