PDA

View Full Version : سوال: ارسال اطلاعات دیتاگریدویو به کریستال ریپورت بدون استفاده از بانک



forodo
یک شنبه 09 شهریور 1393, 15:18 عصر
سلام
با کدهای زیر می تونم اطلاعات تکست باکس هام رو به کریستال ریپورت بفرستم ولی چطور می تونم اطلاعات دیتاگریدویورو بفرستم؟
ReportDocument rpt = new ReportDocument();
rpt.Load(@"..\..\CrystalReport5.rpt");
rpt.SetParameterValue("ali1", textBox1.Text);
rpt.SetParameterValue("My Parameter 3", textBox2.Text);
rpt.SetParameterValue("My Parameter 4", textBox3.Text);
crystalReportViewer1.ReportSource = rpt;
اینکار رو انجام می دم ولی فقط اطلاعات سطر آخر رو می ریزه:
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
rpt.SetParameterValue("My Parameter", dataGridView1.Rows[i].Cells[0].Value.ToString());
rpt.SetParameterValue("My Parameter 2", dataGridView1.Rows[i].Cells[1].Value.ToString());
}
http://8pic.ir/images/vi72qeafory25sgqipu7.png

forodo
یک شنبه 09 شهریور 1393, 16:27 عصر
اینو پیدا کردم ولی چرا زیادی توی گزارش نشون می ده؟
private void button1_Click(object sender, EventArgs e)
{
DataSet ds = new DataSet();
DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("name");
dt.Columns.Add("family");
foreach (DataGridViewRow dgv in dataGridView1.Rows)
{
dt.Rows.Add(dgv.Cells[0].Value, dgv.Cells[1].Value, dgv.Cells[2].Value);
}
ds.Tables.Add(dt);
///////////////////////////////////////////////////////////////////////////////////////////
DataTable dt1 = new DataTable();
dt1.Columns.Add("id1");
dt1.Columns.Add("name1");
dt1.Columns.Add("family1");
foreach (DataGridViewRow dgv in dataGridView2.Rows)
{
dt1.Rows.Add(dgv.Cells[0].Value, dgv.Cells[1].Value, dgv.Cells[2].Value);
}
ds.Tables.Add(dt1);
ds.WriteXmlSchema("Sample1.xml");
///////////////////////////////////////////////////////////////////////////////////////////
CrystalReport9 cr = new CrystalReport9();
cr.SetDataSource(ds);
crystalReportViewer1.ReportSource = cr;
}
http://8pic.ir/images/foywq0sxkcta6ppwa1ep.png

sobaisobai
یک شنبه 09 شهریور 1393, 16:33 عصر
سلام
کدت درسته چون به تعداد دوتا دیتا گرید پاس میده به کریستال ریپورت


DataSet ds = new DataSet();
DataTable dat = new DataTable();
dat.Columns.Add("id", typeof(string));
dat.Columns.Add("name", typeof(string));
dat.Columns.Add("family", typeof(string));

dat.Rows.Add(txtpcode.Text, date, txtprice.Text, lblRicive.Text);
ds.Tables.Add(dat);

va.SetDataSource(ds);
ViewForm vv = new ViewForm();
vv.crystalReportViewer1.ReportSource = va;

forodo
یک شنبه 09 شهریور 1393, 16:57 عصر
سلام
کدت درسته چون به تعداد دوتا دیتا گرید پاس میده به کریستال ریپورت


DataSet ds = new DataSet();
DataTable dat = new DataTable();
dat.Columns.Add("id", typeof(string));
dat.Columns.Add("name", typeof(string));
dat.Columns.Add("family", typeof(string));

dat.Rows.Add(txtpcode.Text, date, txtprice.Text, lblRicive.Text);
ds.Tables.Add(dat);

va.SetDataSource(ds);
ViewForm vv = new ViewForm();
vv.crystalReportViewer1.ReportSource = va;

چیکار کنم که اینطوری تکراری نیاد؟

محمد آشتیانی
یک شنبه 09 شهریور 1393, 18:21 عصر
سلام
دوست عزیز ، شما وقتی توی باند Details فیلد قرار میدی ، اون فیلد بصورت خودکار به تعداد ردیف های دیتاست شما تکرار میشه ، که درست هم هست ، اصلا اصول کار همینه
اگر نمیخواهید این اتفاق بیفته فیلد ها رو توی همون باند PageHeaderقرار بدین تا تکرار نشه ، البته در این صورت فقط اولین سطر دیتاست شما نمایش داده میشه

forodo
یک شنبه 09 شهریور 1393, 18:33 عصر
سلام
دوست عزیز ، شما وقتی توی باند Details فیلد قرار میدی ، اون فیلد بصورت خودکار به تعداد ردیف های دیتاست شما تکرار میشه ، که درست هم هست ، اصلا اصول کار همینه
اگر نمیخواهید این اتفاق بیفته فیلد ها رو توی همون باند PageHeaderقرار بدین تا تکرار نشه ، البته در این صورت فقط اولین سطر دیتاست شما نمایش داده میشه
خیلی ممنون که جواب دادید.
ولی پس الان من چیکار کنم؟
توی بعضی از فرمام 2 دیتاگریده و توی بعضی ها 3تا دیتاگریدویو هست.

محمد آشتیانی
یک شنبه 09 شهریور 1393, 18:42 عصر
این لینک ها رو ببین
http://www.codeproject.com/Tips/599943/DataGridView-to-Crystal-Report-in-Csharp

http://www.codeproject.com/Articles/12694/Creating-Crystal-Reports-using-C-with-Datasets

forodo
یک شنبه 09 شهریور 1393, 18:50 عصر
این لینک ها رو ببین
http://www.codeproject.com/Tips/599943/DataGridView-to-Crystal-Report-in-Csharp

http://www.codeproject.com/Articles/12694/Creating-Crystal-Reports-using-C-with-Datasets
از صبح تا حالا این سایت و سایتای خارجی رو زیر و رو کردم.
اولی همونی هست که باهاش الان دارم کار میکنم و اگر یدونه دیتاگریدویو باشه مشکلی نیست و درست کار می کنه. مشکل من دوتاست.
دومی هم برای کار با دیتابیس هست که اطلاعاتی که داخل دیتاگریدویو هستش توسط کاربر وارد می شه و دیتابیسی درکار نیست.
من همون اولی رو تغییر دادم که بشه با چندتا دیتاگرید کار کرد که نشد و نمی دونم کجاش ایراد داره.
این دیتاست که برای دوتا گریده:
DataSet ds = new DataSet();
این دیتاتیبل و دیتاگریداولیم که میریزه توی دیتاتیبل اولم:
DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("name");
dt.Columns.Add("family");
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
dt.Rows.Add(dataGridView1.Rows[i].Cells[0].Value, dataGridView1.Rows[i].Cells[1].Value, dataGridView1.Rows[i].Cells[2].Value);
}
ds.Tables.Add(dt);
اینم دیتاتیبل دومم که دیتاگریدویوی دومم میریزه داخلش:
DataTable dt1 = new DataTable();
dt1.Columns.Add("id1");
dt1.Columns.Add("name1");
dt1.Columns.Add("family1");
for (int j = 0; j < dataGridView2.Rows.Count - 1; j++)
{
dt1.Rows.Add(dataGridView2.Rows[j].Cells[0].Value, dataGridView2.Rows[j].Cells[1].Value, dataGridView2.Rows[j].Cells[2].Value);
}
ds.Tables.Add(dt1);
اینم که میریزه داخل فایل xml:
ds.WriteXmlSchema("Sample1.xml");
اینم که دیتاست رو میریزه توی کریستال ریپورتم و توی ویوور نمایش داده می شه:
CrystalReport9 cr = new CrystalReport9();
cr.SetDataSource(ds);
crystalReportViewer1.ReportSource = cr;
حالا توی پست 2 (http://barnamenevis.org/showthread.php?467294-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF%D 9%88%DB%8C%D9%88-%D8%A8%D9%87-%DA%A9%D8%B1%DB%8C%D8%B3%D8%AA%D8%A7%D9%84-%D8%B1%DB%8C%D9%BE%D9%88%D8%B1%D8%AA-%D8%A8%D8%AF%D9%88%D9%86-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%A8%D8%A7%D9%86%DA%A9&p=2093315&viewfull=1#post2093315) اطلاعات رو که داخل دیتاگریدویوهام وارد می کنم و دکمه رو می زنم به من اونطوری تکراری نشون می ده.

محمد آشتیانی
یک شنبه 09 شهریور 1393, 20:01 عصر
سلام مجدد
ببین دوست عزیز ، شما توی گزارشت میتونی فیلدها رو بر اساس یک دیتاسورس نمایش بدی (به عنوان دیتاسورس اصلی) ، این یعنی باند Details توی گزارش باید از یک دیتاسورس تغذیه بشه
مواقعی که بیشتر از یک دیتاسورس استفاده میشه برای نمایش توی باندهای دیگه گزارش و یا گزارشاتی هست که به صورت Master/Detail هستن

با توجه به این مسئله شما باید به ترتیبی همه دیتا گرید ها رو تو یه دیتاست بریزی تا بتونی از باند Details استفاده کنی(البته واضحه که اصولی نیست)

forodo
یک شنبه 09 شهریور 1393, 20:09 عصر
سلام مجدد
ببین دوست عزیز ، شما توی گزارشت میتونی فیلدها رو بر اساس یک دیتاسورس نمایش بدی (به عنوان دیتاسورس اصلی) ، این یعنی باند Details توی گزارش باید از یک دیتاسورس تغذیه بشه
مواقعی که بیشتر از یک دیتاسورس استفاده میشه برای نمایش توی باندهای دیگه گزارش و یا گزارشاتی هست که به صورت Master/Detail هستن

با توجه به این مسئله شما باید به ترتیبی همه دیتا گرید ها رو تو یه دیتاست بریزی تا بتونی از باند Details استفاده کنی(البته واضحه که اصولی نیست)
شرمنده اصلاً متوجه نشدم.
می دونم که اون قسمت Details برای تکرار هستش یعنی اگر توی بانک اطلاعاتی 50 تاسطر داریم اون 50تا سطر رو توی اون قسمت نشون میده
من تا حالا با کریستال ریپورت کار نکردم و امروز اولین بارمه که شروع کردم.
می شه با یه مثال توضیح بدید. واقعاً توی اینترنت هیچی پیدا نکردم در این مورد.