# مباحث متفرقه برنامه نویسی > گزارش سازی با Crystal Report >  تغییر property نمودار رسم شده از طریق کد برنامه

## mzamani

سلام به همه دوستان
من یک نمودار در کریستال ریپورت رسم کرده ام. اکنون می خواهم propertyهای آن را درون برنامه تغییر دهم. اما نمی دانم چگونه و در کجا به این گراف دسترسی داشته باشم تا بتوانم مقادیر property های آن را تغییر دهم. در ضمن namespace مربوط به آن را هم نمی دانم.
لطفاً مرا راهنمایی کنید :خجالت:

----------


## reza_rad

*CrystalDecisions*.CrystalReports.Engine.ChartObject

----------


## mzamani

با سلام و تشکر از شما
من این namespace و نیز موارد زیر را اضافه کردم
Imports CrystalDecisions.CrystalReports.Engine.
Imports CrystalDecisions.Sharedو در فرم یک crystalreportviewer استفاده کردم و فایل گزارشم که شامل نمودار است با عنوان crystalreport1 به عنوان source آن قرار دادم ولی وقتی کد زیر را برای دسترسی به property های نمودار می نویسم این خطا را نشان می دهد:Dim crpt As CrystalReport1خطا:      Type crystalreport1 is not defineحالا چه کار باید بکنم؟ :متفکر:

----------


## reza_rad

نباید چنین اروری وجود داشته باشه.
برید و از توی کلاس ویو روی namespace  پروژه تون کلیک کنید و برید تا پایین تر .چک کنید اونجا کلاسی به نام crystalreport1  وجود داره یا نه؟

----------


## mzamani

با سلام و تشکر 
من کلاس ویو را چک کردم چنین کلاسی وجود نداره . نمی دانم کجای کارم اشکال داره
در ضمن از راهنمایی تون ممنون

----------


## reza_rad

خواهش می کنم:)

احتمالا توی ایجاد ریپورت مشکلی پیش اومده.
crystalreport1  رو پاک کنید و یکبار دیگه از اول ایجاد کنید. پروژه رو هم build کنید ببینید مشکل حل میشه؟

----------


## mzamani

با تشکر مجدد
من در یک برنامه دیگر هم امتحان کردم همین مشکل به وجود آمد
ببینید کاری که من می کنم دقیقا به صورت زیر است:
1- add new item -> crystal report -> standard
2- ایجاد connection و ادامه ویزارد Report Creation
3- insert chart
4- add new item -> web form
5- در این فرم یک crystal report viewer قرار داده و گزارش خود را به آن bind می کنم
هنگام اجرا دقیقا درست جواب می دهد ولی در behind code فرم، اصلاً crystalreport1 را نمی شناسد
در ضمن name space ها را اضافه کردم و reference زیر را هم add کردم:
crystaldecision.crystalreport.enginاگر اشکالی وجود داره راهنمایی بفرمایید :خجالت:

----------


## reza_rad

من تست کردم.
من هم دقیقا همین کار رو می کنم ولی کلاسش رو ایجاد می کنه!

روی crystalreport1.rpt توی پروژه کلیک کنید.
توی پنجره ی property  ببینید خاصیت build action  آیا Embedded Resource هست یا چیز دیگه؟

----------


## mzamani

سلام
در قسمت crystalreport1 property در پروژه های من اصلا خاصیت build action وجود نداره 
راستی برنامه من در دات نت فریمورک 2 با vb.net نوشته شده، آیا ممکنه با اینکه برنامه نتیجه گزارش و نمودار را درست نشون می ده ، در نصب جایی مشکل داشته باشه؟؟ :گیج:

----------


## reza_rad

> در قسمت crystalreport1 property در پروژه های من اصلا خاصیت build action وجود نداره


عجب!
البته شاید از خصوصیات دات نت 2 اینه. من دات نت 2 دارم ولی چون کریستال همراهش نصب نیست نمی تونم اینو چک کنم.




> راستی برنامه من در دات نت فریمورک 2 با vb.net نوشته شده، آیا ممکنه با اینکه برنامه نتیجه گزارش و نمودار را درست نشون می ده ، در نصب جایی مشکل داشته باشه؟؟


البته شما برای نصب باید همه merge module  ها رو به ست آپ برنامه اضافه کنی. در مورد مراحل ساخت ست آپ و اضافه کردن مرج ماژولها توی همین تالار مطالب زیادی هست که با جستجو پیداشون می کنی.

----------


## reza_rad

مشکل شما اینجا مطرح شده:
http://forums.asp.net/thread/1364045.aspx

راه حل:

I found the problem:

*Using Crystal Reports for Visual Studio 2005, when you create a report it won't add a class which you could create a report instance with.*
So you have to add:

Public Class myReport

Inherits ReportClass

Public Sub New()

MyBase.New()

End Sub


Public Overrides Property ResourceName() As [String] 

Get 

Return "myReport.rpt" 

End Get 

Set(ByVal value As [String]) 

'Do nothing 

End Set 

End Property 
End

Class 
 

In order to do:

 

Dim

myReportObject As New myReport 
 

then you can do whatever you want with your instace, like setting parameters if you are using a stored procedure to populate your report

 

Dim

parm As New ParameterDiscreteValue() 

Dim values As New ParameterValues() 
parm.Value = strValue

values.Add(parm)

'This next line will set the value for your parameter avoiding the extremely anoying page that prompts for the parameters

myReportObject .DataDefinition.ParameterFields.Item(0).ApplyCurre  ntValues(values)

'This lines will avoid the second most anoying page that prompts for user name and password if you are not using a trusted connection

myReportObject .SetDatabaseLogon(ConfigurationManager.AppSettings  (

"user"), ConfigurationManager.AppSettings("Password")) 
CrystlRprtVwr.ReportSource = myReportObject

----------


## mzamani

با سلام و تشکر فراوان
من توانستم یک نمونه از گزارش در برنامه ایجاد کنم، ولی هر چه سعی کردم نتوانستم به نمودار در آن دسترسی پیدا کنم. یعنی نمی دانم چطور در کد برنامه یک نمودار ایجاد و property های آن را تغییر دهم.
لطفاً باز هم مرا راهنمایی بفرمایید. :لبخند:

----------


## reza_rad

نمودار باید از داخل خود گزارش ایجاد شود.
شما فقط می تونید مقدار معدودی از خصوصیت هاش رو از توی کد تغییر بدین مثل width و ...
این هم کد نمونه:

        Dim CRDemo As New CrystalReport1
        Dim CRChart As CrystalDecisions.CrystalReports.Engine.ChartObject = CType(CRDemo.ReportDefinition.ReportObjects.Item("  Graph1"), CrystalDecisions.CrystalReports.Engine.ChartObject  )
        CRChart.Width = 100
        Me.CrystalReportViewer1.ReportSource = CRDemo
        Me.CrystalReportViewer1.Refresh()

----------


## mzamani

باز هم متشکرم
من باید حدود 30 تا نمودار داشته باشم. در واقع با انتخاب کاربر فیلدی که باید نمودار بر اساس اون رسم بشه تعیین می شه. از اونجایی که نمودارها فقط در فیلدی که در on change  of در chart expertبا هم تفاوت دارند، می خواستم این خصوصیت را در کد و در زمان اجرا تغییر دهم. 
اگر این کار ممکن نباشه من باید 30 تا نمودار را رسم کنم و بر اساس انتخاب کاربر یکی از اونها را visible نمایم.
اگر غیر از این است لطفاً راهنمایی بفرمایید. :لبخند:

----------


## reza_rad

فکر نمی کنم بتونید این خصوصیت رو از کد عوض کنید.
شاید هم راهی باشه.و البته اگه کسی راهی سراغ داشته باشه حتما ارایه می کنه.

----------


## mzamani

با سلام و تشکر
من برای هر نمودار یک فایل کریستال ریپورت ایجاد کردم. در فرم برنامه کاربر فیلد مورد نظر خود را انتخاب می کند و سپس گزارش مربوطه bind می شود. الان مشکلم اینست که:
اولاً: تعداد زیادی فایل کریستال ایجاد کرده ام.
دوماً: با انتخاب هر فیلد برای نمایش گزارش قسمت logonکریستال به صورت زیر فعال می شود:
The Report you requested require further information
Server Name:
DataBase
Username
Password                 Logonآیا ممکن است این قسمت را حذف کنیم یا اینکه لااقل یک بار نمایش داده شود ، نه برای هر گزارش؟

----------


## reza_rad

برای حل مشکل logon :
توی همین تالار *logoninfo* رو جستجو کنید.

----------


## mzamani

به خاطر راهنمایی هاتون متشکرم

----------

