PDA

View Full Version : مبتدی: قرار دادن فایل گزارش گیری کریستال داخل فایل اجرایی نه در کنار آن



bazardeh
سه شنبه 25 مرداد 1390, 00:21 صبح
سلام
من فایل های کریستالم به صورت زیر در برنامه است و این کار باعث می شه که فایلهای کریستال همیشه بقل فایل اجرایی باشن و در صورت نبودن خطا می دهد


73861
و به صورت زیر هم ،مثلا به یکی از انها دسترسی دارم



@".\Reportuser1.rpt";

من می خوام یه کاری بکنم که این فایلها در داخل فایل اجرایی قرار بگیره نه در کنار آن
با تشکر

Esmail Solhkhah
سه شنبه 25 مرداد 1390, 00:26 صبح
چرا ریپورتها رو تو DEBUG ایجاد کردید

ریپورت رو موقع ایجاد تو روت پروژه ایجاد کنید

نیاز به لود هم نیس و داخل exe شما BUILD میشه

موفق باشید.

bazardeh
سه شنبه 25 مرداد 1390, 00:33 صبح
چرا ریپورتها رو تو DEBUG ایجاد کردید

ریپورت رو موقع ایجاد تو روت پروژه ایجاد کنید

نیاز به لود هم نیس و داخل exe شما BUILD میشه

موفق باشید.


این کار رو کردم اما موقع آدرس دهی مشکل دارم این کد منه برای کار و لود کریستال که هیچ مشکلی ندارم


try
{
SqlConnection con = new SqlConnection("Server=(local);database=RSR;integrated security=true;");
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
DataTable dt = new DataTable();
con.Open();
SqlCommand com = new SqlCommand();
com.Connection = con;
com.CommandText = "select * from user1 ";
da.SelectCommand = com;
da.Fill(dt);
ReportDocument rd = new ReportDocument();
rd.FileName = @".\Reportuser1.rpt";
rd.SetDataSource(dt);
crystalReportViewer1.ReportSource = rd;
con.Close();
}
catch
{
MessageBox.Show("در هنگام نمایش اطلاعات در کریستال ریپورت مشکلی به وجود آمده است" + "\n\nمحل وقوع خطا\nForm Report_User.cs \n\n برنامه به صورت اتوماتیک بسته خواهد شد لطفا دوباره سعی کنید", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
Application.Exit();
}


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


rd.FileName = @"Reportuser1.rpt";

Esmail Solhkhah
سه شنبه 25 مرداد 1390, 00:40 صبح
SqlConnection con = new SqlConnection("Server=(local);database=RSR;integra ted security=true;");
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
DataTable dt = new DataTable();
con.Open();
SqlCommand com = new SqlCommand();
com.Connection = con;
com.CommandText = "select * from user1 ";
da.SelectCommand = com;
da.Fill(dt);

CrystalReport1 report = new CrystalReport1();
report.SetDataSource(dt);
crystalReportViewer1.ReportSource = report;

con.Close();

bazardeh
سه شنبه 25 مرداد 1390, 00:50 صبح
خود فایل ساخته شده با کریستال یا همون فایل rpt موجود در عکس وضعیت چی میشه
در این قسمت خطا میده


CrystalReport1 report = new CrystalReport1();

bazardeh
سه شنبه 25 مرداد 1390, 00:51 صبح
من اگر خود فایل rpt رو تو روت برنامه قرار بدم تا در فایل اجرایی بره باید چگونه ادرس دهی کنم

Esmail Solhkhah
سه شنبه 25 مرداد 1390, 00:53 صبح
شما ریپورت رو چطور ایجاد میکنید؟

bazardeh
سه شنبه 25 مرداد 1390, 00:59 صبح
project --> add new item --> reporting -->Crystal Report
بعد بقیه کارها و دادن جدول پایگاه مورد نظر و از قبل تعیین شده

Esmail Solhkhah
سه شنبه 25 مرداد 1390, 01:01 صبح
خب تا اینجاش که درسته پس فرض کنیم که شما یه ریپورت اضافه کردید CrystalReport1

پس کلاسش هست نباید خطا بده

bazardeh
سه شنبه 25 مرداد 1390, 01:06 صبح
اصلا خطایی نداریم مشکل من اینه که من اگر در debug بذارم فایلهای کریستال رو مشکلی نیست و برنامه کار می کنه و کاربر گزارش رو می گیره ولی با این کار یعنی فایلهای کریستال بقل فایل اجرایی قرار می گیره موقع پیاده سازی حالا

من می خوام یه کاری کنم که فایلهای کریستالم بیاد داخل فایل اجرایی حالا یا تو روت یا تو Resources

و من در اینجا موقع ادرس دهی مشکل دارم

Esmail Solhkhah
سه شنبه 25 مرداد 1390, 01:10 صبح
دوست عزیز اگه شما ریپورت رو تو روت ایجاد کردید و خاصیت Copy To Output Directory اونو تغییر ندادید به همراه exe بیلد میشه شما نیازی به لودش ندارید

کد بنده رو ببینید اومدم و از کلاس ریپورت یه آبجکت ساختم

طبیعتا شما همون ریپورت رو دیزاین هم کردید

bazardeh
سه شنبه 25 مرداد 1390, 01:14 صبح
یعنی موقع دادن نام و آدرس چگونه می شود
چون در debug بود ان طوری می شد


rd.FileName = @".\Reportuser1.rpt";


حالا که توی روت است آیا اینجوریه


rd.FileName = @"Reportuser1.rpt";

Esmail Solhkhah
سه شنبه 25 مرداد 1390, 01:22 صبح
اینا اصلا نیاز نیس چون کلاس ریپورت میشه جزئی از اپلیکیشن شما

کد بنده رو یه بار دیگه نیگا کنید یه تستی هم بکنید

bazardeh
سه شنبه 25 مرداد 1390, 01:28 صبح
CrystalReport1 report = new CrystalReport1();


خطا میده من چیزی باید رفرنس کنم

Esmail Solhkhah
سه شنبه 25 مرداد 1390, 01:30 صبح
کد کامل خطا ؟

bazardeh
سه شنبه 25 مرداد 1390, 01:33 صبح
این کد شماست که دادید و من تقریبا فرمایش شما را فهمیدم
شما کلاس ReportDocument رو تغییر دادید
کد شما

SqlConnection con = new SqlConnection("Server=(local);database=RSR;integra ted security=true;");
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
DataTable dt = new DataTable();
con.Open();
SqlCommand com = new SqlCommand();
com.Connection = con;
com.CommandText = "select * from user1 ";
da.SelectCommand = com;
da.Fill(dt);

CrystalReport1 report = new CrystalReport1();
report.SetDataSource(dt);
crystalReportViewer1.ReportSource = report;

con.Close();

این دقیقا چیه


CrystalReport1 report = new CrystalReport1();

بعد به نظر من یه قسمت file name اضافه بشه که اسم فایل کریستال بگیره

Esmail Solhkhah
سه شنبه 25 مرداد 1390, 01:36 صبح
بله درسته از کلاس CrystalReport استفاده کردم که موقع ایجاد ریپرت درس میشه

موردی که گفتید حل شد؟

bazardeh
سه شنبه 25 مرداد 1390, 01:42 صبح
من باید چیزی using بکنم چون این قسمت مشکل داره


CrystalReport1 report = new CrystalReport1();

Esmail Solhkhah
سه شنبه 25 مرداد 1390, 01:44 صبح
درسته ولی چه خطایی میده؟

بگید تا رفرنس رو اگه لازمه بگم چیه

bazardeh
سه شنبه 25 مرداد 1390, 01:49 صبح
کد مورد استفاده


SqlConnection con = new SqlConnection("Server=(local);database=RSR;integrated security=true;");
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
DataTable dt = new DataTable();
con.Open();
SqlCommand com = new SqlCommand();
com.Connection = con;
com.CommandText = "select * from user1 ";
da.SelectCommand = com;
da.Fill(dt);

//ReportDocument rd = new ReportDocument();
//rd.FileName = Reportuser1;
//rd.SetDataSource(dt);
//crystalReportViewer1.ReportSource = rd;
CrystalReport1 report = new CrystalReport1();
rrr.SetDataSource(dt);
crystalReportViewer1.ReportSource = rrr;
con.Close();


خطا

73867

73866http://barnamenevis.org/images/misc/pencil.png

Esmail Solhkhah
سه شنبه 25 مرداد 1390, 01:52 صبح
شما دارید از VS2010 استفاده میکنید

پیش فرض کریستال ریپورت رو نداره

مجزا نصبش کردید؟

bazardeh
سه شنبه 25 مرداد 1390, 02:00 صبح
2008 استفاده می کنم و پیش فرض است اینم using ها


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using CrystalDecisions.CrystalReports.Engine;
using System.Data.SqlClient;

Esmail Solhkhah
سه شنبه 25 مرداد 1390, 02:04 صبح
اینا رو باید تو لیست رفرنسهاتون داشته باشید

CrystalDecisions.CrystalReports.Engine
CrystalDecisions.Enterprise.Framework
CrystalDecisions.Enterprise.InfoStore
CrystalDecisions.ReportSource
CrystalDecisions.Shared

bazardeh
سه شنبه 25 مرداد 1390, 02:07 صبح
دارم اگه نباشه کلا ارور میده

Esmail Solhkhah
سه شنبه 25 مرداد 1390, 02:12 صبح
خب بس اگه اینا رو دارید که باید کلاس CrystalReport رو بشناسه

ببینید وقتی شما روی پروژه راست کلیک میکنید و Add New Item و بعد هم Reporting بعد Crystal Report رو انتخاب میکنید خود vs رفرنسهای لازمه رو Add میکنه

اصولا نباید موردی باشه

میتونید پروژه رو بزارید یه نیگا بکنم ببینم چشه ؟

bazardeh
سه شنبه 25 مرداد 1390, 02:19 صبح
پروژه 21 مگه

Esmail Solhkhah
سه شنبه 25 مرداد 1390, 02:21 صبح
نه فقط اون فرم رو که خطا میده

اگه میشه تو یه پروژه ساده

bazardeh
سه شنبه 25 مرداد 1390, 02:35 صبح
این یه برنامه کوچک فقط بانک نداره اگز اجرا بشه درست جدول خالی است

Esmail Solhkhah
سه شنبه 25 مرداد 1390, 02:40 صبح
این سطر رو

crystalReport rrr = new CrystalReport();

به این تغییر بدید مورد حله


Crystaluser rrr = new Crystaluser();

دلیلش هم اینه که نام کلاس ریپورت شما Crystaluser هستش پس باید آبجکت ریپورتتون رو از اون new کنید

bazardeh
سه شنبه 25 مرداد 1390, 02:44 صبح
دستتون درد نکنه خیلی خیلی ممنون

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

Esmail Solhkhah
سه شنبه 25 مرداد 1390, 02:47 صبح
وقتی بخاید گزارش رو با کد ایجاد کنید