View Full Version : سوال: مشکل در CrystalReport
صنم
سه شنبه 05 شهریور 1387, 10:21 صبح
سلام من یک برنامه تحت وب با asp.net وc# دارم که برای گزارش گیری از crystal report استفاده می کنم
وقتی اجرا می کنم این کد رو برام error می گیره:
CrystalReport1 crysralreport2 = new CrystalReport1();
و این error را می گیره :
The type or namespace name 'CrystalReport1' could not be found (are you missing a using directive or an assembly reference?)
کسی می تونه کمکم کنه ؟
el_abdollahi
سه شنبه 05 شهریور 1387, 13:41 عصر
باید فایل های dll مربوط به کریستال رو به پوشه bin اضافه کنید.
صنم
چهارشنبه 06 شهریور 1387, 07:17 صبح
با تشکر از جواب شما اگه ممکنه بگین این فایلهای dll رو از کجا باید پیدا کنم ؟
el_abdollahi
چهارشنبه 06 شهریور 1387, 07:59 صبح
CrystalDecisions.CrystalReports.Engine.dll
CrystalDecisions.ReportSource.dll
CrystalDecisions.Shared.dll
CrystalDecisions.Web.dll
CrystalDecisions.Windows.Forms.dll
در ضمن باید روی سرور کریستال ریپورت .net هم نصب باشه.
موفق باشید.
صنم
چهارشنبه 06 شهریور 1387, 10:07 صبح
من این ddl ها رو در شاخه bin کپی کردم ولی همچنان روی خط
CrystalReport1 crysralreport2 = new CrystalReport1();
ایراد می گیره (در ضمن من با c# و visual studio 2008) کار می کنم
سار
چهارشنبه 06 شهریور 1387, 10:12 صبح
قط کپی کافی نیست
انها باید Register هم بشن، در واقع باید CR روی هاست نصب شده باشه ویا این DLL ها رو از طریق برنامه نصب روی Host نصب کنی، اگر امکان نصب سایت با برنامه نصب را ندارید سعی کنید DLL ها رو با استفاده از gacutil.exe روی سیستم رجیستر کنید.
el_abdollahi
چهارشنبه 06 شهریور 1387, 10:23 صبح
اینها رو هم باید ایمپورت یا همون Uses ;kd:
Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine
صنم
چهارشنبه 06 شهریور 1387, 11:46 صبح
من کریستال ریپورت رو همراه vs 2008 در سیستم نصب کرده ام و dll ها رو از مسیر پیش فرض نصب شده کپی کردم و به فلدر bin آوردم در ضمن کدهای زیر را هم به بالای صفحه اضاضه کرده ام ول همچنان کار نمی کند :
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using CrystalDecisions.Web;
لطفا اگر کسی مثال یا برنامه ای با c# در این زمینه داره بگذاره
el_abdollahi
چهارشنبه 06 شهریور 1387, 12:11 عصر
میشه بگی میخوای چه کار کنی؟
نمیدونم ولی شاید اصلا این دستور لازم نباشه!!! منظورم اینه که مشکل از این دستور باشه!!!!!!!!!
صنم
شنبه 09 شهریور 1387, 07:21 صبح
سلام
من می خوام با کریستال ریپورت تحت وب گزارشگیری کنم ولی report source را خودم در کد به ریپورت ارسال کنم این کد من هست که با استفاده از یک stored procedure که دو تا پارامتر دارد این پارامترها را به آن ارسال می کنم و نتیجه را می خواهم که در ریپورت نشان دهم ولی متاسفانه هر کاری می کنم این بخش نسبت دادن این dataset که به عنوان نتیجه stored procedure برگشته به ریپورت درست در نمی آید :
//// retrieving username and password from cookie on the client
String username = "";
//DateTime searchdate = DateTime.Today.Date;
DateTime searchdate = DateTime.Now;
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated )
{
if (HttpContext.Current.User.Identity is FormsIdentity)
{
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
username = ticket.Name.ToString();
}
//miladi date
if (DatePickerCtrl1.DateString.Length != 0)
{
System.Globalization.PersianCalendar PersianCalendar = new PersianCalendar();
String Today = DatePickerCtrl1.DateString;
int year = Convert.ToInt32(Today.Substring(0, 4));
int month = Convert.ToInt32(Today.Substring(5, 2));
int day = Convert.ToInt32(Today.Substring(8, 2));
searchdate = (PersianCalendar.ToDateTime(year, month, day, 0, 0, 0, 0).Date);
}
//end miladi date
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["eazphcpayeshconnectionstring"].ConnectionString);
string cmdtext = "";
using (con)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "drug-ch12";
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter username1 = new SqlParameter();
username1.ParameterName = "@username1";
username1.SqlDbType = SqlDbType.NVarChar;
username1.Value = username;
cmd.Parameters.Add(username1);
SqlParameter date1 = new SqlParameter();
date1.ParameterName = "@date1";
date1.SqlDbType = SqlDbType.SmallDateTime;
if (DatePickerCtrl1.DateString.Length != 0)
date1.Value = searchdate;
else
date1.Value = DBNull.Value;
cmd.Parameters.Add(date1);
date1.IsNullable = true;
SqlParameter shahrestan = new SqlParameter();
shahrestan.ParameterName = "@shahrestan";
shahrestan.SqlDbType = SqlDbType.NVarChar;
shahrestan.Value = "آذرشهر";
cmd.Parameters.Add(shahrestan);
// cmd.Parameters.AddWithValue("@searchdate", searchdate);
using (cmd)
{
con.Open();
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
();crysralreport1 report= new crystalreport1
report.SetDataSource(dt);
CrystalReportViewer1.ReportSource = report;
CrystalReportViewer1.DataBind();
bsng110
شنبه 09 شهریور 1387, 17:51 عصر
هوالحکیم. سلام. ببخشید که وسط بحثتون می پرم ولی تا اونجایی که من فهمیدم، یک کم قضیه را زیاد از حد پیچیده کردید! اگه اشتباه نکنم، دوست عزیزمون "صنم" فایل ها را به صورت دستی در شاخه bin پروژه شون کپی کرده اند؟ اگر این طور است، باید بگویم که نیازی به این کار نیست و آن فایل ها را پاک کنید. شما فقط باید refrence های برنامه تان را اصلاح کنید. بر روی پوشه Refrence های پروژه خودتون در پنجره Solution Explorer راست کلیک کنید و گزینه Add Refrence را بزنید. در زبانه اول یعنی همون NET.، به دنبال کتابخانه های کریستال ریپورت بگردید و آنها را به پروژه خود اضافه کنید. در ضمن همانطور که می دانید using و import فقط باعث می شوند که نیازی به نوشتن namespace ها در کد نباشد و موجب اضافه کردن refrence و ... نمی شوند، بنابراین پس از اضافه کردن refrence ها، اگر دوست داشتید، می توانید using ها را هم بنویسید یا ننویسید. امیدوارم که مشکلتان به این صورت حل شود. در ضمن در تایپک های قبلی گفته ام که به قول دوست خوبمون "سار"، فراموش نکنید که چنانچه بخواهید برنامه خود را بر روی سیستمی که ویژوال استودیو و ... ندارد اجرا کنید، با خطا مواجه می شوید و خطا می گوید که کتابخانه ها و فایل های dll کریستال را پیدا نمی کند. برای رفع این مشکل به تاپیک دوم http://barnamenevis.org/forum/showthread.php?t=119245 یا تاپیک هشتم http://barnamenevis.org/forum/showthread.php?t=116164 مراجعه کنید. یا علی حق نگهدارتون
صنم
یک شنبه 10 شهریور 1387, 07:13 صبح
سلام
من این فایلهای dll رو با add refrence هم اضافه کردم ولی باز مشکل من حل نشد
bsng110
یک شنبه 10 شهریور 1387, 08:27 صبح
هوالعلیم. سلام. خوب این دفعه چی می گه؟ آخه همین شکلی که بگی کار نمی ده، من و دوستان از کجا بفهمیم عیب از کجاست؟ شاید داره بنده خدا می گه فضای نام اشتباهی استفاده کردی یا یک ; فراموش کردی یا ...! لطفاً خطا را بنویسید تا بتوانیم پاسخ دهیم. یا علی حق نگهدارتان
صنم
یک شنبه 10 شهریور 1387, 12:38 عصر
این error رو میده :
The type or namespace name 'CrystalReport1' could not be found (are you missing a using directive or an assembly reference
در ضمن بعد از اضافه کردن این dll ها از طریق add refrence چیزی به فلدر bin اضافه نمی شه .
bsng110
یک شنبه 10 شهریور 1387, 13:25 عصر
هوالحکیم.
سلام.
نباید هم اضافه بشه. شما تا حالا دیده اید فایلی به اسم system.dll در شاخه bin وجود داشته باشه؟ ولی در solution explorer در پروژه #C شما در قسمت properties این فایل add شده است! اما در مورد اون خطا، لطفاً کد مربوطه را نیز بنویسید یعنی خطی که برنامه در آن خطا می دهد(چنانچه چند خط قبل و بعدش را به همراه using ها تون بگذارید که دیگر خیلی عالی می شود).
یا علی
حق نگهدارتون
صنم
دوشنبه 11 شهریور 1387, 07:34 صبح
سلام
using System.Data.SqlClient;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using CrystalDecisions.Web;
..
.
.
.
CrystalReport1 report = new CrystalReport1(); // روی این خط error می گیره
report.SetDataSource(dt);
CrystalReportViewer1.ReportSource = report;
bsng110
دوشنبه 11 شهریور 1387, 08:59 صبح
هوالحکیم.
سلام.
دیدید گفتم حق داره؟ باید کدتون به صورت زیر باشد:
using CrystalDecisions.CrystalReports.Engine;
void f()
{
CrystalDecisions.CrystalReports.Engine.ReportClass Report;
Report = new CrystalReport1();
....;
Report.SetDataSource(dt);
Report.SetParameterValue("Parameter1", "مقدار پارامتر اول");
....;
CrystalReportViewer1.ReportSource = report;
}
امیدوارم مشکلتون حل بشه.
یا علی
حق نگهدارتون
صنم
دوشنبه 11 شهریور 1387, 09:49 صبح
باز error داد :
The type or namespace name 'CrystalReport1' could not be found (are you missing a using directive or an assembly reference?
من فکر می کنم که کلاسی به اسم CrystalReport1 باید وجود داشته باشه که همراه CrystalReport1.rpt ایجاد شده باشه که من بتونم یک Instance از اون کلاس رو با new ایجاد کنم ولی نمی دونم این کلاس به کجا اضافه می شه که برنامه نمی تونه اون رو پیدا کنه
bsng110
دوشنبه 11 شهریور 1387, 16:20 عصر
هوالحکیم. سلام دوست عزیز. اولاً بهتر بود می گفتید کجای کد این خطا را داد ولی به احتمال زیاد همون جایی این خطا رخ داده که Report = new CrystalReport1(); ! هر گزارش کریستال در اصل شامل یک فایل با پسوند rpt و یک فایل با پسوند cs می باشد. چنانچه به صورت اشتباه این فایل را پاک کرده اید، پیشنهاد می کنم یک بار دیگر گزارش خود را تهیه کنید یعنی یک گزارش دیگر بسازید. چنانچه فیلد های زیادی در این کریسال خود دارید و نمی توانید از خیر آن بگذرید، یک فایل گزارش دیگر بسازید و فقط ظاهر آن را شبیه ظاهر گزارش فعلی خود بکنید و از فایل cs آن کپی بگیرید و به نام این فایل گزارش خود، که cs آن پاک شده است، بنویسید ولی قول نمی دهم که این کار جواب بدهد. راستی، قبل زا همه این کار ها، یک چیز دیگه را تست کنید. بر روی علامت + کنار گزارش خودتون کلیک کنید. اگه فایلی با همون نام و پسوند cs وجود داشت، بدونید که نیاز به اون کارهایی که گفتم نیست. اشکال از فضای نام هاست. این فایل cs را باز کنید و ببینید که فضای نام آن چیست و آن را نیز using کنید. به احتمال زیاد عیب از اینجاست چرا که فضای نام گزارش های کریستال با توجه به دیتا بیس و ... نامگذاری می شود و حتی اگر آن را تغییر دهیم، گزارش دچار مشکل می شود و بنده که نتوانستم چنین کاری انجام دهم و هر دفعه که نام فضای نام آن را تغییر دادم، مجدداً نام فضای نام قبلی برگشت. امیدوارم که این دفعه دیگر مشکلتان حل شود. یا علی حق نگهدارتان
صنم
سه شنبه 12 شهریور 1387, 08:16 صبح
هوالحکیم. سلام دوست عزیز. اولاً بهتر بود می گفتید کجای کد این خطا را داد ولی به احتمال زیاد همون جایی این خطا رخ داده که Report = new CrystalReport1(); ! هر گزارش کریستال در اصل شامل یک فایل با پسوند rpt و یک فایل با پسوند cs می باشد. چنانچه به صورت اشتباه این فایل را پاک کرده اید، پیشنهاد می کنم یک بار دیگر گزارش خود را تهیه کنید یعنی یک گزارش دیگر بسازید. چنانچه فیلد های زیادی در این کریسال خود دارید و نمی توانید از خیر آن بگذرید، یک فایل گزارش دیگر بسازید و فقط ظاهر آن را شبیه ظاهر گزارش فعلی خود بکنید و از فایل cs آن کپی بگیرید و به نام این فایل گزارش خود، که cs آن پاک شده است، بنویسید ولی قول نمی دهم که این کار جواب بدهد. راستی، قبل زا همه این کار ها، یک چیز دیگه را تست کنید. بر روی علامت + کنار گزارش خودتون کلیک کنید. اگه فایلی با همون نام و پسوند cs وجود داشت، بدونید که نیاز به اون کارهایی که گفتم نیست. اشکال از فضای نام هاست. این فایل cs را باز کنید و ببینید که فضای نام آن چیست و آن را نیز using کنید. به احتمال زیاد عیب از اینجاست چرا که فضای نام گزارش های کریستال با توجه به دیتا بیس و ... نامگذاری می شود و حتی اگر آن را تغییر دهیم، گزارش دچار مشکل می شود و بنده که نتوانستم چنین کاری انجام دهم و هر دفعه که نام فضای نام آن را تغییر دادم، مجدداً نام فضای نام قبلی برگشت. امیدوارم که این دفعه دیگر مشکلتان حل شود. یا علی حق نگهدارتان
با سلام من با visual studio 2008 کار می کنم و وقتی از طریق add new item یک crystal report رو add می کنم فقط یک crystalreport1.rpt اضافه می شود و علامت + هم کنارش نیست که باز کنم . فکر می کنید ایراد کار از کجااست.
bsng110
سه شنبه 12 شهریور 1387, 17:33 عصر
هوالحکیم. سلام. عجیبه؟ من ویژوال استودیو 2008 ندارم که تست کنم وگرنه حتماً جوابتون را می دادم. امیدوارم دوستان دیگه که ویژوال استودیو 2008 دارن، بتونن کمکتون کنن. ببخشید که نتونستم کمکی بکنم. یا علی. حق نگهدارتون
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.