# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > ابزارهای گزارش سازی >  ارسال پارامتر به crystal report

## amir_pro

سلام به دوستان
از داخل combobox کاربر باید نام یکی از ماههای سال را انتخاب کند و پس از اینکه دکمه چاپ را زد مقدار انتخاب شده combobox به گزارش پاس شود و بعد از آن چاپ شود. چه طور باید این کار را انجام دهم؟

----------


## ali2000_1358

اگر مشکلتون تو گرفتن مقدار سال از  combo  می باشد . combobox1.text  این مقدار ر ا با شما می دهد ولی اگر مشکل در فرستادن این مقدار به کریستال می باشد  بگید تا شما رو راهنمائی کنم

----------


## hassan razavi

با توجه به عنوان سوال ، منظور دوستمون ارسال پارامتر به کریستال هست. برای اینکار می تونید از متد SetParameterValue شی گزارش مورد نظرتون استفاده کنید.

----------


## amir_pro

ممنون جناب رضوی میرم داخل msdn ولی میشه برنامه ای در این مورد بدهید.
جناب رضوی میشه راهنمایی کامل تری بفرمایید

----------


## hassan razavi

در قسمت Field Explore محیط طراحی کریستال یک Paramet ایجاد کنید. سپس انرا هر جای گزارش می خواهید قرار دهید. سپس از طریق متد SetParameterValue شی ایجاد شده از 
گزارشتون ، آنرا مقدار دهی کنید.

----------


## ebtekar

اینطوری بنویس به صورت کاملا پویا البته خودت ببین چطوری دوست داری ولی من اکثرا اینجوری می نویسم مشکلی هم ندارم


if (comboBox2.Text == "قطعات ثبت شده")
{
//تهیه گزارش پرینت
OleDbConnection objConnection = newOleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Application.StartupPath + "/backup/wbanck.mdb" + ";Persist Security Info=False");
OleDbDataAdapter objDataAdapter = newOleDbDataAdapter();
DataSet objDataSet = newDataSet();
objDataAdapter.SelectCommand = newOleDbCommand();
objDataAdapter.SelectCommand.Connection = objConnection;
objDataAdapter.SelectCommand.CommandText = "Select sabt.serial,sabt.moshakhasat,sabt.daryaft,sabt.war  anty,sabt.date,sabt.moshkel,sabt.tozihat,usserpass  .nsherkat from sabt,usserpass where sabt.waranty = '" + comboBox1.Text + "' AND sabt.date >= '" + maskedTextBox1.Text + "' AND sabt.date <= '" + maskedTextBox2.Text + "'";
objDataAdapter.SelectCommand.CommandType = CommandType.Text;
objConnection.Open();
// بار گذاری جدول در دیتا آداپتور
objDataAdapter.Fill(objDataSet,"sabt");
objConnection.Close();
//********************************************
frm_reportkoli frm_residemoshtari = newfrm_reportkoli();
reportgood1.SetDataSource(objDataSet.Tables["sabt"].DefaultView);
frm_residemoshtari.crystalReportViewer1.ReportSour  ce = reportgood1;
frm_residemoshtari.ShowDialog();
//**********************************************
comboBox2.Text = "";
}

----------


## Mahdi.Kiani

> اینطوری بنویس به صورت کاملا پویا البته خودت ببین چطوری دوست داری ولی من اکثرا اینجوری می نویسم مشکلی هم ندارم


یه سوال

شما خاصیت modifier مربوط به crystalReportViewer1  در فرم frm_reportkoli را روی public تنظیم کردین؟
اگر آره که باید بگم کار درستی نکردین

یه نکته دیگه اینکه برای fetch کردن داده ها از کد زیر که کمتر هست هم می تونین استفاده کنین 
مضاف بر اینکه نیاز به باز و بسته کردن connection هم ندارین


OleDbConnection con = new OleDbConnection("Connection String");           
            OleDbDataAdapter da = new OleDbDataAdapter("Query String", con);          
            DataSet ds = new DataSet();          
            da.Fill(ds, "Table Name");

----------


## Mahdi.Kiani

> ممنون جناب رضوی میرم داخل msdn ولی میشه برنامه ای در این مورد بدهید.
> جناب رضوی میشه راهنمایی کامل تری بفرمایید


توضیحات که کامل هست
1) در فایل کریستال ریپورت مربوطه (مثلا CrystalRepoert1) در پنجره Field Explorer روی گزینه ParameterFields کلیک راست کنید و با گزینه New یک فیلد جدید بسازید (مثلا testParam)
2) یک عدد CrystalReportViewr میذارین روی فرمتون (به مقدار لازم). مثلا CrystalReportViewer1

3) خاصیت reportSource مربوط بهCrystalReportViewer1 را روی CrystalRepoert1 تنظیم کنید
4) با کد زیر می تونین مقدار testParam را ست کنید


 CrystalReport11.SetParameterValue("testParam", pVal);



به جای pVal هم مقدار مورد نظرتون را میذارین
5) دیگه ساده تر از این نمیشد گفت
6) حالا می تونین چاییتون را بخورین و به خودتون آفرین بگین . چون شما موفق شدید

یا علی

----------


## pourang_us

سلام
دوستان من بعد از سه سال از این مطلب استفاده کردم اما موضوع این هست که من در زمان اجرا از همین کد برای ارسال پارامتر به پزارشم استفاده میکنم اما هنگام اجرای گزارش یک فرم باز میشه و از من مقدار پارامتر رو میخواد.
کسی میدونه من کجای کار رو اشتباه میرم؟؟
کد من 


  
Dim MyReport AsNew CrstalReport001
MyReport .SetParameterValue("FarsiDate", TempFDate) aa
  
 متغیر TempDate هم حاوی تاریخ شمسی من هست.

با سپاس

----------


## mh1365

سلام دوست عزیز
شما کدتو به این صورت بنویس
CrystalReportViewer1.ReportSource = rpt
rpt.SetParameterValue("font", "B Titr")
یعنی بعد از اینکه سورساتو مشحص کردی پارامتراتو مقدار بده آخر از همه حتما مشکلت حل میشه

----------


## pourang_us

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


موفق باشید

----------


## samiradormohammadi

خیییییییییییلی ممنون خیلی به درد خورد

----------


## mrs Izadi

سلام
من هم این مشکل رو دارم اما با راهنمایی که دوستمون کرده مشکلم حل نشد من کدهامو اینجا میذارم لطفا راهنماییم کنید
 Report.rptReceipt rptReceipt = new SchoolRegistrations.Report.rptReceipt();
                rptReceipt.SetDataSource(dSetCash);
                Report.Formpreview frmprintpreview = new SchoolRegistrations.Report.Formpreview();
                frmprintpreview.rptViewer.ReportSource = rptReceipt;
                rptReceipt.SetParameterValue(0, CommonClass.PersiaDate.GetSystemPersiaDate(System.  DateTime.Now));

----------


## farzad_1354

با سلام اساتيد محترم 
من يه گزارش دارم که با زدن يه دکمه فرم محتوي گزارش رو لود ميکنه تا اينجاي کار مشکلي ندارم 
در اين گزارش يک subreport  دارم که ديتاهاي توش لود نميشه 
کلا چطور ميشه سورس سابريپورت داخل يک ريپورت رو مقدار دهي کرد کدي که استفاده کردم به اين صورته 
string CTS = @"SELECT * FROM PPMPRT WHERE ID = '" + frm1.ID.Text + "'";
SCM.Parameters.Clear();
            SDA.SelectCommand = SCM;
            SDA.SelectCommand.CommandText = CTS;
            SDA.SelectCommand.Connection = SCO;
            DataTable DT = new DataTable();
            DataSet ds = new DataSet();
            if (SCO.State != ConnectionState.Open) SCO.Open();
            SDA.Fill(DT);
            ReportDocument RD = new ReportDocument();
            RD.Load("rptPPM.rpt");
            RD.SetDataSource(DT);
            crystalReportViewer1.ReportSource = RD;
            crystalReportViewer1.Show();

----------

