PDA

View Full Version : سوال: چاپ تکراری در گزارش ایجاد شده توسط Crystal Report



masoudmok
پنج شنبه 01 مهر 1389, 18:46 عصر
سلام .
من این کد رو توی برنامم نوشتم منتها کریستال ریپورت موقع چاپ گزارش قبلیو چاپ می کنه . یعنی اولی رو درست چاپ می کنه دومی تکراری اولیه . چرا ؟؟؟

private void button1_Click(object sender, EventArgs e)
{
OleDbConnection con = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=D:\\DataBase\\" + "PishroSepahan.mdb");
OleDbCommand cmd = new OleDbCommand("", con);
OleDbCommand cmd1 = new OleDbCommand("", con);
OleDbCommand cmd2 = new OleDbCommand("", con);
OleDbDataAdapter da = new OleDbDataAdapter("", con);
DataSet ds = new DataSet();
OleDbDataReader dr;
try
{
string malek, systype, pelak1, pelak2, pelak3, pelak4, motor, tarikhtst;
cmd.CommandText = "delete * from tempbime";
con.Open();
cmd.ExecuteNonQuery();
con.Close();
cmd.CommandText = "select * from car,makhzan,reg,info,par1,par2,par3 where car.filenum=" + str1 + " And makhzan.filenum =" + str1 + " And makhzan.filenum =" + str1 + " And reg.filenum =" + str1 + " And info.filenum =" + str1 + " And par1.filenum =" + str1 + " And par2.filenum =" + str1 + " And par3.filenum =" + str1;
con.Open();
dr = cmd.ExecuteReader();
dr.Read();
malek = dr["malek"].ToString();
systype = dr["nam"].ToString() + " " + dr["type"].ToString();
pelak1 = dr["pelak1"].ToString();
pelak2 = dr["pelak2"].ToString();
pelak3 = dr["pelak3"].ToString();
pelak4 = dr["pelak4"].ToString();
motor = dr["shasi"].ToString();
a = dr["tarikh"].ToString().Substring(0, 4);
b = dr["tarikh"].ToString().Substring(4, 2);
c = dr["tarikh"].ToString().Substring(6, 2);
tarikhtst = a + "/" + b + "/" + c;
dr.Close();
con.Close();
cmd.CommandText = "insert into tempbime values('" + textBox2.Text + "','" + malek + "',";
cmd.CommandText += "'" + textBox1.Text + "','" + systype + "','" + pelak1 + "','" + motor + "','" + tarikhtst + "','" + pelak2 + "','" + pelak3 + "','" + pelak4 + "')";
con.Open();
cmd.ExecuteNonQuery();
con.Close();
crystalReportViewer1.ReportSource = "D:\\DataBase\\report2.rpt";
crystalReportViewer1.PrintReport();
this.Close();
}
catch
{
MessageBox.Show("??? ?? ????? ?? ???? ????????");
}
}

str اسم پارامترمه که پاس میدم بهش . جالب اینه که حذف و ریختن تو جدول tempbime درسته ولی موقع چاپ قبلیو چاپ می کنه . مطمئنم از اون قسمت اخرشه چون تا con.close اخر دقیقا و بدون مشکل انجام می شه . یعنی قسمت دیتابیسیش مشکل نداره . کمک کنین تو رو خدا

mehdi.mousavi
پنج شنبه 01 مهر 1389, 23:25 عصر
سلام.
من Crystal Report دم دستم ندارم، اما فکر میکنم چون پارامترهای گزارشتون تغییر نکرده، CR هم نمیره اونها رو مجدد Load کنه. برای اینکار، روی ReportDocument یک متود هست به اسم Refresh، اونو Call کنید، احتمالا مشکل حل میشه.

نوشتن این کد:

ReportDocument doc = new ReportDocument();
doc.Load("D:\\DataBase\\report2.rpt");
crystalReportViewer1.ReportSource = doc;

جای
crystalReportViewer1.ReportSource = "D:\\DataBase\\report2.rpt";

هم ممکنه باعث رفع مشکل بشه.

موفق باشید.

masoudmok
جمعه 02 مهر 1389, 09:35 صبح
سلام .

دو تا مشکل هست . اولا این که reportdocument رو نمیشناسه اصلا . یعنی این ابجکت وجود نداره !!!

در ثانی با refresh کردن خوب میشه منتها یه دفعه باید 1 بار refresh بشه یه دفعه 4 تا 5 بار تا درست بشه . اینو با دکمه refresh خود crystalreportviewer امتحان کردم . حتی با تایمر هم یه وقفه 2 ثانیه ای دادم بعد با کد refresh کردم . جواب نداد تو اکثر موارد . این جور که پیداست باید بعد از چند ثانیه دستی refresh بشه . شاید درست بشه .

mehdi.mousavi
جمعه 02 مهر 1389, 09:45 صبح
سلام .

دو تا مشکل هست . اولا این که reportdocument رو نمیشناسه اصلا . یعنی این ابجکت وجود نداره !!!

در ثانی با refresh کردن خوب میشه منتها یه دفعه باید 1 بار refresh بشه یه دفعه 4 تا 5 بار تا درست بشه . اینو با دکمه refresh خود crystalreportviewer امتحان کردم . حتی با تایمر هم یه وقفه 2 ثانیه ای دادم بعد با کد refresh کردم . جواب نداد تو اکثر موارد . این جور که پیداست باید بعد از چند ثانیه دستی refresh بشه . شاید درست بشه .


سلام.
دوست عزیز، منظور از Refresh، این نیست که گزارش شما روی صفحه Refresh بشه (بصورت Visual). در واقع داریم به ReportDocument میگیم که باید دوباره داده ها رو از Data Source بگیره، علیرغم اینکه پارامترهای ورودیش تغییری نکرده (والا از اطلاعات Cache شده اش استفاده میکنه).

ReportDocument توی CrystalDecisions.CrystalReports.Engine Namespace تعریف شده و وقتی در دسترسه که CrystalDecisions.CrystalReports.Engine.dll رو به Reference های پروژه اتون اضافه کنید.

موفق باشید.

masoudmok
شنبه 03 مهر 1389, 07:47 صبح
سلام .
ممنون از راهنماییتون .
منتها مگه نباید با بستن فرم کل ابجکت های روی فرم از توی حافظه پاک بشه ؟؟؟
در ضمن روش بالا جواب نداد . همون مشکلو داره . یعنی CR با همه ی قدرتش مشکل به این بزرگی داره ؟؟؟