PDA

View Full Version : سوال: ارسال پارامتر به گزارش



hmariya
سه شنبه 08 دی 1388, 09:30 صبح
با سلام. من می خواهم از طریق فرم برنامه C# یک مقدار متغیر را به Query ایجاد شده در بانک اطلاعاتی SQL-Server 2005 بفرستم تا در موقع اجرای گزارش Crystal Report متصل به اون Query نتیجه گزارش مربوط به اون پارامتر رو ببینم. کسی می تونه راهنماییم کنه؟

ennovation
سه شنبه 08 دی 1388, 10:31 صبح
سلام
دوست عزیز گره کار شما با stored Procedures باز میشود . در این مورد مطالب زیادی میتوانید پیدا نمایید.
توسط این درس میتوانید مبانی آنرا یاد بگیرید. اگر باز هم متوجه نشدید میتوانم با مثال کمکتان کنم.
http://www.sql-server-performance.com/articles/dba/stored_procedures_basics_p1.aspx

slashslash2009
سه شنبه 08 دی 1388, 11:50 صبح
دوست من سوالتون همچین یه نموره نا مفهومه اگر میخواید از طریق برنامتون به کریستال رپورت پارامتر بفرستی میتونم کمکتون کنم

hmariya
شنبه 12 دی 1388, 16:13 عصر
بله می خوام از طریق فرم به ریپورت پارامتر ارسال کنم... اگه ممکنه راهنماییم کنید

tefos666
شنبه 12 دی 1388, 16:30 عصر
یه متغیر public تعریف کن من تو یه کلاس به اسم PublicEvents تعریف کردم


public static ReportDocument rd = new ReportDocument();


تو USING اینو ADD کن


using CrystalDecisions.CrystalReports.Engine;


یه فرم درست کن که شی Reportviewer توش باشه تو Load فرم اینو بنویس



private void FrmPrintReport_Load(object sender, EventArgs e)
{
try
{
if (PublicEvents.rd.FileName!=null)
{
crystalReportViewer1.ReportSource = PublicEvents.rd;
crystalReportViewer1.Show();
}
else
{
MessageBox.Show("هیچ گزارشی جهت نمایش وجود ندارد");
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message,"خطا در نمایش گزارش");
}
}




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



private void ReportByAllPersons()
{
try
{
mydb.Connect("");
SqlDataAdapter daPersons = new SqlDataAdapter("Select id, FileNumber as[شماره پرونده], name as [نام], family as [نام خانوادگی]," +
"FatherName as [نام پدر],Tel as[تلفن تماس],Address as[آدرس],BirthDay as[تاریخ تولد]," +
"BirthLocation as[محل تولد],IdentificationNumber as[شماره شناسنامه],TelCritical as [تلفن ضروری]," +
"Rigion as[مذهب],BloodGroup as[گروه خونی],DoneDate as[تاریخ تکمیل],ReleaseLocation as [محل صدور]," +
"NationalIdentificationCode as[کد ملی],PostalCode as[کدپستی],FileState as[وضعیت] from tbl_persons ", mydb.ConStr);
DataSet dsPersons = new DataSet();
daPersons.Fill(dsPersons);
grdReport.DataSource = dsPersons;
grdReport.DataMember = "Table";
grdReport.RetrieveStructure();
grdReport.RootTable.Columns[0].Visible = false;
DataTable dt = new DataTable();
PublicEvents.rd.FileName = Application.StartupPath + "\\Reports\\total.rpt (file://\\Reports\\total.rpt)";
PublicEvents.rd.SetDataSource(dsPersons);
PublicEvents.rd.SetParameterValue("FaDate", PublicEvents.FarsiDate());
PublicEvents.rd.SetParameterValue("ReportType", "گزارشگیری از لیست پرونده های موجود ");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "خطا در برقراری اتصال با بانک اطلاعاتی");
}
mydb.Disconnect("");
}



مثلا من تو بالا 2 تا پارامتر داشتم یکی تاریخ فارسی رو برگردونده و دیگری از دیتاست یکسری نتایج کوئری رو
این تابع size کاغذ رو برات درست میکنه از RADIOBUTTON استفاده کردم



private void CheckPaperSize()
{
if (rdb4.Checked == true)
{
PublicEvents.rd.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.PaperA4;
}
if (rdb5.Checked == true)
{
PublicEvents.rd.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.PaperA5;

}


نهایتا تابع زیر رو صدا میزنی


private void btnPrintEmptyForm_Click(object sender, EventArgs e)
{
ReportByAllPersons();
}


نهایتا فرم گزارش رو لود کن

امیدوارم مفید واقع شده باشه ، ضمنا برای اضافه کردن پارامتر تو کریستال ریپورت تو منو سمت راستت یه علامت سوال که نوشته PARAM اگر اشتباه نکنم راست کلیک میکنی و ADD میکنی و نام بهش میدی ، البته اول ظاهر گزارشت رو DESIGN کن بعد .