سلام خدمت اساتید برنامه نویس
من یه گرید ویو دارم که میخوام با استفاده از کریستال ریپورت دیتاگرید ویو رو پرینت بگیره
خواهشا راهنمایی کنید
سلام خدمت اساتید برنامه نویس
من یه گرید ویو دارم که میخوام با استفاده از کریستال ریپورت دیتاگرید ویو رو پرینت بگیره
خواهشا راهنمایی کنید
دادا من میخوام از دیتاگریدویو پرینت بگیرم.
سلام،
اینم پرینت از DataGridView
if (Datagridview1.Rows.Count <= 0)
{
MessageBox.Show(". لطفا جهت چاپ اطلاعات مورد نظر را انتخاب نماييد");
return;
}
DataTable DtReport= new DataTable();
DtReport.Columns.Add("orderNumber", typeof(string));
DtReport.Columns.Add("orderName", typeof(string));
DtReport.Columns.Add("address", typeof(string));
DtReport.Columns.Add("registerDate", typeof(string));
for (int i = 0; i < Datagridview1.Rows.Count ; i++)
{
string[] DGridReport = new string[] {
Datagridview1.Rows[i].Cells[0].Value.ToString()
,Datagridview1.Rows[i].Cells[1].Value.ToString()
,Datagridview1.Rows[i].Cells[2].Value.ToString()
,Datagridview1.Rows[i].Cells[3].Value.ToString()};
DtReport.Rows.Add(DGridReport);
}
R.FileName = @"Report_Name.rpt";
DtReport.TableName = "Orders";
R.SetDataSource(DtReport);
R.SetParameterValue(0, DateReport);
PrintPreView P = new PrintPreView();
P.Crv.ReportSource = R;
P.MdiParent = this.ParentForm;
P.Show();
آخرین ویرایش به وسیله faravaghi : چهارشنبه 06 مهر 1390 در 22:41 عصر
سلام
یه آبجکت Dataset تو پروژه اضاف کن
بعد یه جدول توش اضاف کن و به تعداد ستون های دیتاگرید توش ستون بذار
بعد یه نمونه تو برنامه ازش بساز
و اونو با داده های دیتا گرید ویو پر کن
بعد برو تو کریستال تو قسمت آبجکت های دات نت خود پروژه
میبینی که اون دیتاست رو که اد کردی اونجا هستش
دیگه بقیشو خودتون بلد هستین
یه نمونه از فرمی که می خواید کریستال توش نشان داده شه و یه نمونه از کریستالی که ساختی و دیتا سورس کریستال رو با دیتاست پر می کنی و دیگه تمام
اقا ارور داره؟
DtReport چیه؟
آخرین ویرایش به وسیله sobaisobai : چهارشنبه 06 مهر 1390 در 12:38 عصر
فقط دوستمون که گفته بود از printdgv استفاده کن،من دارمش فقط نمی دونم چه جوری میشه ازش استفاده کرد؟
کسی نیست جواب بده؟
خواهشا اگه کسی بلده راهنمایی کنه
سلام،
با عرض پوزش کد رو اصلاح کردم.
سلام دوباره
داداش بازم ارور داره
R چیه؟
DtReport چیه؟
سلام دوست گرامی،
این کد رو من از داخل یکی از پروژه هام کپی کردم. ببخشید.
اگه مشکل داشت در خدمتم:
if (Datagridview1.Rows.Count <= 0)
{
MessageBox.Show(". لطفا جهت چاپ اطلاعات مورد نظر را انتخاب نماييد");
return;
}
ReportDocument R = new ReportDocument();
DataTable DtReport = new DataTable();
DtReport.Columns.Add("orderNumber", typeof(string));
DtReport.Columns.Add("orderName", typeof(string));
DtReport.Columns.Add("address", typeof(string));
DtReport.Columns.Add("registerDate", typeof(string));
for (int i = 0; i < Datagridview1.Rows.Count ; i++)
{
string[] DGridReport = new string[] {
Datagridview1.Rows[i].Cells[0].Value.ToString()
,Datagridview1.Rows[i].Cells[1].Value.ToString()
,Datagridview1.Rows[i].Cells[2].Value.ToString()
,Datagridview1.Rows[i].Cells[3].Value.ToString()};
DtReport.Rows.Add(DGridReport);
}
R.FileName = @"Report_Name.rpt";
DtReport.TableName = "Orders";
R.SetDataSource(DtReport);
R.SetParameterValue(0, DateReport);
PrintPreView P = new PrintPreView();
//Crv = new CrystalDecisions.Windows.Forms.CrystalReportViewer ();
P.Crv.ReportSource = R;
P.MdiParent = this.ParentForm;
P.Show();
در ضمن این متغیر (PrintPreView) که تعریف کردم یک فرمه که تو اون فقط یک CrystalReportViewer با Modifiers به صورت Public که تو این کد فراخوانی شده.
DtReport هم یک DataTable است.
داداش دمت گرم
درست شد
سلام،
کد رو یک نگاه کردی!
ReportDocument R = new ReportDocument();
داداش از این ارور میگیرهکد HTML:string[] DGridReport = new string[] { [dataGridViewX1.Rows[i].Cells[0].Value.ToString() ,dataGridViewX1.Rows[i].Cells[1].Value.ToString() ,dataGridViewX1.Rows[i].Cells[2].Value.ToString() ,dataGridViewX1.Rows[i].Cells[3].Value.ToString()}
ارور :Object reference not set to an instance of an object.
آخرین ویرایش به وسیله sobaisobai : چهارشنبه 06 مهر 1390 در 23:24 عصر
دوباره سلام،
ببین بذار من یک بار کد رو برات توضیح بدم، بعد ببین چطوریه برو برا خودت تغییر بده.
این کدی که من گذاشتم این جوریه که اول میاد اطلاعاتی که شما می خوای ببری تو کریستال ریپورت رو از DataGridView میگیره. یعنی میام یک DataTable تعریف میکنم
بعد باید براش ستون تعریف کنیDataTable DtReport = new DataTable();
DtReport.Columns.Add("orderNumber", typeof(string));
DtReport.Columns.Add("orderName", typeof(string));
DtReport.Columns.Add("address", typeof(string));
DtReport.Columns.Add("registerDate", typeof(string));
این تعریف ستون بسته به نیاز تغییر میکنه. حتی اسم و نوع ستون ها رو هم می تونید تغییر بدید.
بعد از این مراحل باید مغادیر دلخواه رو تو یک آرایه از نوع رشته قرار بدیم تا بتونیم این آرایه رو داخل DataTable اضافه کنیم. این کا رو به اندازه تمام رکورد های DataGridView انجام میدیم، یعنی
for (int i = 0; i < Datagridview1.Rows.Count ; i++)
{
string[] DGridReport = new string[] {
Datagridview1.Rows[i].Cells[0].Value.ToString()
,Datagridview1.Rows[i].Cells[1].Value.ToString()
,Datagridview1.Rows[i].Cells[2].Value.ToString()
,Datagridview1.Rows[i].Cells[3].Value.ToString()};
DtReport.Rows.Add(DGridReport);
}
بعد از این عمل DataSource برای ReportDocument آماده میشه. فقط میمونه بقیه ماجرا که میشه این:
R.FileName = @"Report_Name.rpt";
DtReport.TableName = "Orders";
R.SetDataSource(DtReport);
زمانی که شما در فرم گزارش پارامتری تعریف کردی که می خوای مقدار دهی کنی از این کد استفاده میشه:
R.SetParameterValue(0, DateReport);
مثلا تاریخ برای گزارش. بعدش اومدم فرمی که قراره کاربر به عنوان نمونه اون رو ببینه رو بهش با کد زیر نشون میدم.
در آخر هم باید یادت باشه رکورد های DataTable رو حذف کنی چون اگه کاربر از چاپ منصرف بشه و دوباره دلش بخواد چاپ کنه اطلاعات قبلی به اضافه اطلاعات جدید براش نشون داده میشه که وقتی حذف کنی میشه فقط اطلاعات جدید:PrintPreView P = new PrintPreView();
//Crv = new CrystalDecisions.Windows.Forms.CrystalReportViewer ();
P.Crv.ReportSource = R;
P.MdiParent = this.ParentForm;
P.Show();
for (int i = DtReport.Rows.Count - 1; i >= 0; i--)
{
DtReport.Rows.RemoveAt(i);
}
چیز دیگه هم هست.
اونم که شما گفتی برای اینه که مقادیر ستون دلخواه رو ببرم تو گزارش. حالا شما اسم DataGridView رو هر چی گذاشتی جایگزین کن یا یه جوری بجای اون بیا مقادیر رو بذار.
از توضیحاتت ممنون متوجه شدم
فقط ارور زیر رو میگیره
ارور :Object reference not set to an instance of an object.کد HTML:string[] DGridReport = new string[] { [dataGridViewX1.Rows[i].Cells[0].Value.ToString() ,dataGridViewX1.Rows[i].Cells[1].Value.ToString() ,dataGridViewX1.Rows[i].Cells[2].Value.ToString() ,dataGridViewX1.Rows[i].Cells[3].Value.ToString()}
مشکل قبلی حل شد حالا از کد زیر ارور میگیره
Load report failedکد HTML:R.SetDataSource(DtReport);
سلام مجدد،
شما ببین چند تا ستون داری که می خوای چاپ بشه. به همون تعداد در DataTable ایجاد کن و به همون تعداد هم در رشته ای که داری اضافه میکنی.
دوما بجای 0 و 1 و ... میتونید اسم ردیف در DataGridView رو هم بنویسید، مثلا:
dataGridViewX1.Rows[i].Cells["DgOrderNum"].Value.ToString()
سلام،
شرمنده دیگه میگن سلام سلامتی میاره!
شما آدرس فایل rpt را باید درست بدین دیگه. هر جا ذخیره شده همون آدرس رو بدین. فقط یادتون باشه آدرس دهی نسبی باشه.
مثلا اگه تو یک پوشه به نام Report قرار داره این جوری میشه:
R.FileName = @"Report\CustomerRpt.rpt";
WindowsFormsApplication5.part02.rar
WindowsFormsApplication5.part03.rar
WindowsFormsApplication5.part04.rar
WindowsFormsApplication5.part01.rar
داداش من برنامه ام رو الان اپلود کردم شما زحمت بکش تغییرات رو روش اعمال کن
اول باید اسم سخت افزار و مدل و تعداد رو تو تکس باکس انتخاب کن بهد دکمه اضافه رو بزن
دستت درد نکنه
سلام،
شما چرا برای این فایل گزارش ایجاد نکردی؟
می خوای تو چه قالبی اطلاعاتت رو بریزی؟
در ضمن اون ایرادی که به حلقه For میگیره مال اینه که شما خاصیت Adding رو روی DataGridView فعال کردی بعد اگه یک رکورد اضافه کنی چون یک سطر اضافه ایجاد میکنه و اطلاعاتش NULL است بهت پیغام خطا میده.
یا بیا این خاصیت رو حذف کن یا در شرط حلقه تعداد سطرهای DataGridView رو یکی ازش کم کن:
for (int i = 0; i < dataGridViewX1.Rows.Count-1; i++)
{
string[] DGridReport = new string[] {
dataGridViewX1.Rows[i].Cells[0].Value.ToString()
,dataGridViewX1.Rows[i].Cells[1].Value.ToString()
,dataGridViewX1.Rows[i].Cells[2].Value.ToString()
,dataGridViewX1.Rows[i].Cells[3].Value.ToString()
,dataGridViewX1.Rows[i].Cells[4].Value.ToString()};
DtReport.Rows.Add(DGridReport);
}
در ضمن این اطلاعات در بانک ذخیره میشه یا نه؟
بله داخل بانک ذخیره نمیشه از بانک اطلاعات سخت افزار و مدل و ... میخونه فقط
خاصیت add دیتا گرید رو غیرفعال کردم
فایل گزارش رو هم به پروژه اضافه کردم
حالا از کد زیر ارور میگیره
The report has no tablesکد HTML:R.SetDataSource(DtReport);
سلام،
بیزحمت فایل گزارش رو برام بفرستین
سلام
فقط ادرس فایل رو هم اینو دادم
کد HTML:R.FileName = @"C:\Documents and Settings\Mohammad Amin\My Documents\Visual Studio 2008\Projects\WindowsFormsApplication5\WindowsFormsApplication5\CrystalReport1.rpt";
سلام،
خسته نباشی!!
خودم بلد بودم یک فایل خالی Report بسازم.
برات فایل رو ساختم برو خودت اصلاحش کن.
درضمن تو بانکت یک جدول به نام Report ایجاد کردم و مقادیری رو که قراره تو گزارش چاپ بشه رو تعریف کردم که با استفاده از اون بشه اطلاعات رو پرینت گرفت.
یه نگاهی هم به کد بندازی بد نیست.
بقیه اش دیگه صلیقه و خلاقیت خودت رو میطلبه.
در ضمن اون حذف رکورد های DataTable رو هم حتما به آخر کدت اضافه کن من یادم شد.
یا حق
سلام دوست گرامی،
اینم یک PDF برای همین مثال شما.
اگه وقت داشتی یک نگاه بنداز بد نیست.