PDA

View Full Version : سوال: مشكل در گزارش گيري كريستال ريپورت



012132
سه شنبه 28 آذر 1391, 23:29 عصر
من توي برنامه ام در قسمت ثبت يك ديتاگريد ويو دارم و كنارش يه سرچ باكس كه وقتي كاربر تاريخ رو وارد مي كنه ، ركوردهايي رو كه تو اون تاريخ ثبت شده بودند رو نشون ميده .

حالا من مي خوام كريستال ريپورت اطلاعات رو بعد از سرچ كردن نشون بده .
مثلاً من 10 تا ركورد دارم و تاريخ رو ست مي كنم روي 1391/9/28 ، ديتاگريد ويو به من 3 ركورد نشون ميده كه توي اين روز ثبت شده است .

من مي خوام كدي بنويسم كه data source كريستال ريپورتم ، برابر با اطلاعات فعلي (3 ركورد) ديتا گريد ويو بشه . من كد رو به صورت زير نوشتم اما توي data source ارور ميده .



ReportDocument rd = new ReportDocument();
rd.FileName = "sabt_report.rpt";
sabt_form sf = new sabt_form();
rd.SetDataSource(sf.dg_khadamat); // dg_khadamat اسم ديتا گريد ويو ام هست
crystalReportViewer1.ReportSource = rd;
crystalReportViewer1.Show();

خطا هم اينو ميزنه : خطاي اتصال به بانك اطلاعاتي ميده درصورتي كه قبل از اين فرم فرم لاگين وجود داره و خيلي راحت به بانك اطلاعاتي وصل ميشه و وارد برنامه ميشه .

لطفا راهنماييم كنيد .

hosseinenayati_2009
چهارشنبه 29 آذر 1391, 02:28 صبح
سلام
شما میتونی از یه جدول رابط استفاده کنی.جدول Temp که دقیقا مثل جدولی که ازش سرچ میکنی بسازی .(دقیقا مثل خودش یعنی تعداد و نام فیلد ها با اون یکی باشه). بعدا اطلاعاتی که تو سرچ پیدا میکنی را داخل اون جدول اضافه کنی(insert) کنی و کریستال ریپورتت از اون جدول دوم temp) چاپ بشه.

012132
چهارشنبه 29 آذر 1391, 12:00 عصر
خب راه ديگه اي نداره ؟ مثلاً اطلاعات رو توي list box بريزه و كريستال ريپورت از داخل ليست به ترتيب بخونه يا هر روش ديگه اي .

tara1367
چهارشنبه 29 آذر 1391, 12:17 عصر
ميتوني يه datatable ديگه بسازي و هر ركورد از ديتاگريدت رو داخل اون بريزي در نهايت ديتاتيبل جديد رو به كريستال ريپورت بفرستي:
DataTable dat = new DataTable();
DataColumn dc0 = new DataColumn("Row", typeof(string));
DataColumn dc1 = new DataColumn("Tarikh", typeof(string));
DataColumn dc2 = new DataColumn("Subject", typeof(string));

dat.Columns.Add(dc0);
dat.Columns.Add(dc1);
dat.Columns.Add(dc2);

for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
DataRow dr = dat.NewRow();
dr[0] = dataGridView1.Rows[i].Cells[0].Value;
dr[1] = dataGridView1.Rows[i].Cells[1].Value;
dr[2] = dataGridView1.Rows[i].Cells[2].Value;
dat.Rows.Add(dr);
}

012132
چهارشنبه 29 آذر 1391, 23:20 عصر
دوست عزيز من كاري كه شما گفتيد رو انجام دادم . درست شد . اما چند تا مشكل دارم . اول اينكه من اسم هاي column ها را نوشتم اما ، ديتاهاي ديگري رو واسه گزارش بهن من نشون ميده . مشكل اينه كه در هر بار اجراي برنامه فقط يك بار ميشود گزارش تهيه كرد . يعني اگر من گزارش تهيه كردم و دوباره بيام دكمه گزارش رو بزنم ، خطا ميده كه مقدار از قبل داخل ديتا تيبل وجود داره . من چطور بايست مقدار ديتا تيبل رو حذف كنم ؟ از دستور Clear هم استفاده كردم اما تاثيري نداشت .

در ضمن وقتي فرم كريستال ريپورت رو مي بندم اين ارور رو ميده :

http://8pic.ir/images/wd3j2480bu7pgqlejbb.jpg