PDA

View Full Version : مشکل در پرینت گرفتن از گزارشی که با logoninfo تنظیم شده



mzamani
شنبه 02 دی 1385, 10:38 صبح
با عرض سلام
من برای حل مشکلم logoninfo را search کردم و نهایتاً کد برنامه را به صورت زیر قرار دادم:

Public Overrides Property ResourceName() As [String]
Get
Return x
End Get
Set(ByVal value As [String])
'Do nothing
End Set
End Property
EndClass


Public a As New myReport
Dim logonInfo As New CrystalDecisions.Shared.TableLogOnInfo


"logonInfo.ConnectionInfo.DatabaseName = "DBName"
logonInfo.ConnectionInfo.ServerName = "server_name"
logonInfo.TableName = table
logonInfo.ConnectionInfo.Password = "Pass"
logonInfo.ConnectionInfo.UserID = "user_id"
a.x ="myreport"
Me.CrystalReportViewer1.ReportSource = a
Me.CrystalReportViewer1.RefreshReport()
Me.a.Database.Tables("tableName").ApplyLogOnInfo(logonInfo)

در قسمت design صفحه هم یک crystalreportviewer قرار داده ام ولی گزارشی به آن bind نکرده ام. اکنون برنامه از طریق دستور فوق گزارش را بدون نیاز به logonنمایش می دهد. ولی مشکل اینجاست که وقتی دکمه های بالای گزارش مثل export یا print را انتخاب می کنم گزارش به کلی حذف می شود. این در صورتی است که اگر دستور زیر را بنویسم export می شود ولی باز به logon نیاز دارد. من نمی دانم چطور این دو حالت را با هم ترکیب کنم. لطفاً مرا راهنمایی کنید.

"crystalreportviewer1.reportsource="myreport

reza_rad
شنبه 02 دی 1385, 11:53 صبح
"crystalreportviewer1.reportsource="myreport




a.x ="myreport"
Me.CrystalReportViewer1.ReportSource = a

مگه این دو یک کار رو نمی کنند؟! این همونی که شما می خواهید نیست؟

نکته: لطف کنید برای موضوع جدید حتما تاپیک جدید ایجاد کنید. اینبار من پست شما رو منتقل کردم ولی امیدورام دیگه خودتون رعایت کنید.
با تشکر.

mzamani
شنبه 02 دی 1385, 13:19 عصر
مگه این دو یک کار رو نمی کنند؟! این همونی که شما می خواهید نیست؟

اولی گزارش را مشخص می کنه و دومی اونو به crystalreportviewer در صفحه bind می کنه.
ولی به هر حال مشکل من اینه که نمی دونم کد را چطور بنویسم که با logoninfo تنظیم شده باشه و در عین حال print و export هم بکنه. برای کدهایی که نوشتم هم به سختی به نتیجه رسیدم.
تعداد گزارشات من زیاده لذا:
اولاً باید از طریق کد به crystalreportviewer و بر اساس انتخاب کاربر bind بشه
دوماً مشکل logon حل بشه
سوماً بتوانم print و exportکنم
با تشکر از توجه تون:لبخندساده:

reza_rad
شنبه 02 دی 1385, 13:31 عصر
این کد رو امتحان کنید:


Public Overrides Property ResourceName() As [String]
Get
Return x
End Get
Set(ByVal value As [String])
'Do nothing
End Set
End Property
EndClass


Public a As New myReport
Dim logonInfo As New CrystalDecisions.Shared.TableLogOnInfo


"logonInfo.ConnectionInfo.DatabaseName = "DBName"
logonInfo.ConnectionInfo.ServerName = "server_name"
logonInfo.TableName = table
logonInfo.ConnectionInfo.Password = "Pass"
logonInfo.ConnectionInfo.UserID = "user_id"

Me.a.Database.Tables("tableName").ApplyLogOnInfo(log onInfo)


a.x ="myreport"
Me.CrystalReportViewer1.ReportSource = a
Me.CrystalReportViewer1.RefreshReport()

mzamani
شنبه 02 دی 1385, 13:45 عصر
مشکل حل نشد. فرقی نمی کنه؟؟؟؟:ناراحت:

reza_rad
شنبه 02 دی 1385, 13:54 عصر
resourcename رو هم ست کنید:


rfrm.MycrystalReport.ResourceName = System.Windows.Forms.Application.ExecutablePath;

mzamani
شنبه 02 دی 1385, 14:06 عصر
متوجه نشدم
این کد یعنی چی
کجا باید اضافه بشه؟

mzamani
شنبه 02 دی 1385, 15:34 عصر
من منتظر پاسخ شما هستم
با تشکر

mzamani
دوشنبه 04 دی 1385, 10:11 صبح
با سلام
من می توانم از طریق design فیلد پارامتری ایجاد و بر اساس آن نمودار رسم کنم. ولی مشکل من اینه که نمی دونم با کدهایی که نوشتم و گزارش را از طریق logoninfo باز می کنم چطور و کجا مقدار پارامتر را برای رسم نمودار ارسال کنم.
همون مشکلی که با print و export داشتم و هنوز حل نشده؟:عصبانی++: :گیج:

reza_rad
دوشنبه 04 دی 1385, 10:56 صبح
این کد یعنی چی
کجا باید اضافه بشه؟

در کنار بقیه کدها...
آدرس فایل ریپورت اینجوری ست میشه.شاید مشکلتون با این حل بشه.




من می توانم از طریق design فیلد پارامتری ایجاد و بر اساس آن نمودار رسم کنم. ولی مشکل من اینه که نمی دونم با کدهایی که نوشتم و گزارش را از طریق logoninfo باز می کنم چطور و کجا مقدار پارامتر را برای رسم نمودار ارسال کنم.


جستجو کنید!
http://barnamenevis.org/forum/showthread.php?t=50436&highlight=parameterfield

mzamani
دوشنبه 04 دی 1385, 13:59 عصر
با تشکر از شما آقای راد عزیز به خاطر راهنمایی هاتون
ولی مشکل من اینه که وقتی کدهای مربوط به تعریف پارامتر را می نویسم و کد های logoninfo را هم اضافه می کنم دیگر چیزی نشان داده نمی شه
اما هر کدوم اینها به تنهایی جواب میده . مثلاً فرض کنید همون گزارشی رو که لینکش رو در قسمت قبل برای من گذاشتید و برای اون پارامتر تعریف کردید و فرضاً مقدار پارامتر را از داخل کد به اون ارسال کردید را بخواهید از طریق logoninfo باز کنید و در ضمن قابلیت print و export هم داشته باشه
چطور کد اونو می نویسید.
باز هم تشکر می کنم:لبخندساده:

reza_rad
دوشنبه 04 دی 1385, 14:06 عصر
خواهش می کنم:)

ولی همون گزارشی که مثال گذاشتم اونجا رو من هم با تنظیم logoninfo و هم با ست کردن پارامترها از داخل کد ، بهش وصل میشم. در عین حال پرینت هم می تونم بگیرم و مشکلی نداره!

شاید مشکل شما از جای دیگه باشه

mzamani
دوشنبه 04 دی 1385, 14:21 عصر
اگه ممکنه قسمتی از کد برنامه تون که مربوط به این مطالبه برای من بگذارید
البته با عرض معذرت:لبخندساده:

reza_rad
دوشنبه 04 دی 1385, 14:35 عصر
خواهش می کنم.

این کد فرمی است که از اونجا پارامتر ها رو می خونم و پاس می کنم به گزارش:


private void SetConnectionInfo(Report rpt)
{
CrystalDecisions.Shared.TableLogOnInfo logOnInfo = new CrystalDecisions.Shared.TableLogOnInfo();
logOnInfo.ConnectionInfo.DatabaseName = "Doctor";
string[] strServerFiles;
strServerFiles=System.IO.Directory.GetFiles("c:\\doctordoc");
if(strServerFiles.Length==1)
{
logOnInfo.ConnectionInfo.ServerName = strServerFiles[0].Replace("c:\\doctordoc\\","");
logOnInfo.TableName="document";
logOnInfo.ConnectionInfo.Password = "";
logOnInfo.ConnectionInfo.UserID = "sa";
rpt.MycrystalReport.Database.Tables[0].ApplyLogOnInfo(logOnInfo);
}

}
private void uiButton2_Click(object sender, System.EventArgs e)
{
Report rfrm = new Report();
rfrm.ID=this.TxtDocumentIdEdit.Text;
SetConnectionInfo(rfrm);


CrystalDecisions.Shared.ParameterField ParamField= new CrystalDecisions.Shared.ParameterField();
CrystalDecisions.Shared.ParameterDiscreteValue discreteParam = new CrystalDecisions.Shared.ParameterDiscreteValue();
CrystalDecisions.Shared.ParameterFields ParamFields= new CrystalDecisions.Shared.ParameterFields();


ParamField.ParameterFieldName = "@docId";
discreteParam.Value=Convert.ToInt32(rfrm.ID);
ParamField.CurrentValues.Add(discreteParam);
ParamFields.Add(ParamField);



rfrm.crystalReportViewer1.ParameterFieldInfo=Param Fields;
rfrm.MycrystalReport.ResourceName = System.Windows.Forms.Application.ExecutablePath;
rfrm.crystalReportViewer1.ReportSource=rfrm.Mycrys talReport;
//this.TxtLabData.Text=System.IO.Path.GetFullPath("crystalreport1.rpt");

// CrystalDecisions.CrystalReports.Engine.ReportDocum ent rpt = new CrystalDecisions.CrystalReports.Engine.ReportDocum ent();
// //rpt.Load(System.IO.Path.GetFullPath("crystalreport1.rpt"));
// rpt.Load("C:\\Documents and Settings\\abolfazl\\Desktop\\New Folder\\Doctor\\crystalreport1.rpt");
//
// rpt.SetParameterValue("docId",this.TxtDocumentIdEdit.Text);
// rfrm.crystalReportViewer1.ReportSource=rpt;

rfrm.ShowDialog();
}





در فرمی که گزارش رو می بینم هم این آبجکت ها رو دارم:


public string ID;
public CrystalDecisions.Windows.Forms.CrystalReportViewer crystalReportViewer1;
public Doctor.CrystalReport1 MycrystalReport;

mzamani
سه شنبه 05 دی 1385, 09:18 صبح
من کدهای شما را امتحان کردم
اولاً مشکل این جاست که اصلاً فایل کریستال من را نمی شناسد و وقتی که یک کلاس تعریف می کنم و source آن را فایل کریستال قرار می دهم، گزارش را رسم نمی کند.
به خاطر همین بعضی از خاصیت ها و توابعی که نوشته اید نیز جواب نمی دهد.
من نمی دانم در دات نت 2 چطور باید این کارها را انجام دهم؟؟؟؟؟؟؟!!!!:افسرده: :عصبانی++: :ناراحت: