PDA

View Full Version : سوال: نحوه ی اتصال یه DataGridView به CrystalReport چگونه است؟



zayens
جمعه 24 اردیبهشت 1389, 13:59 عصر
یه دیتاگرید دارم که داده های مورد نظر را از دیتابیس گرفته است.
یه کریستال ریپورت هم به پروژه ام Add کرده ام.
میخوام با زدن دکمه ی مثلا "گزارش" داده های دیتاگرید به کریستال بره.
من تو این زمینه خیلی سرچ کردم ولی مباحث، کلی بود و من چیزی نفهمیدم.
لطفا اگه ممکنه من را راهنمایی کنید.
در ضمن من از کریستال چیزی نمی دونم

خیلی لطف می کنید
ممنون

zayens
جمعه 24 اردیبهشت 1389, 23:06 عصر
سوال من بیخوده یا شما حال ندارید جواب بدید؟؟؟؟یا جفتش؟؟؟؟

zayens
شنبه 25 اردیبهشت 1389, 10:47 صبح
من تا یه جاهایی پیش رفتم

این دکمه ی گزارشه



private void btnPrintFAC_Click(object sender, EventArgs e)
{
myFac = new FACTOR();
myFac.UsedFoodSelect(lblDate.Text.Trim());
GrdView.AutoGenerateColumns = false;
GrdView.DataSource = myFac.DvFactor;
//
frmGozaresh frmG = new frmGozaresh();
frmG.DataViewEmp = myFac.DvFactor;
frmG.ShowDialog();
}

لازم به ذکر است که DataGridView از طریق کلاسهای مربوطه مثل FACTOR به دیتابیس کانکت میشه و پر میشه. دلیلش هم اینه که دفعات اتصال من خیلی زیاد هست و برای این که کانکشن را فقط یک بار بنویسم، براش یه کلاس جداگونه تعریف کردم.

و این هم فرم گزارش که کریستال در اون قرار داره


public partial class frmGozaresh : Form
{
public DataView DataViewEmp;
public frmGozaresh()
{
InitializeComponent();
CrystalReport1 c = new CrystalReport1();
c.SetDataSource(DataViewEmp);
crystalReportViewer1.ReportSource = c;
}
}

اما وقتی گزارش را کلیک می کنم فرم گزارشم خالیه؟
باید چه کار کنم؟؟

zayens
شنبه 25 اردیبهشت 1389, 12:16 عصر
آیا باید در دیزاین کریستال در قسمت section3 Details چیزی بذارم؟ چون این قسمت ها خالی اند

behnam25214
شنبه 25 اردیبهشت 1389, 19:20 عصر
آره باید در قسمت section3 Details فیلدهاتو بزاری.

zayens
شنبه 25 اردیبهشت 1389, 22:21 عصر
آره باید در قسمت section3 Details فیلدهاتو بزاری.
چه طور باید این کار را بکنم؟؟
با کد؟؟ با چه کدی؟؟
لطفا من را راهنمایی کنید.با سپاس

behnam25214
شنبه 25 اردیبهشت 1389, 22:52 عصر
به این صورت عمل کن.:لبخندساده:


از طريق پنجره ي Field Explorer (كه از طريق منوي Crystal reports\Field Explorer قابل دسترسي است.) بر روي Database Fields راست كليك كرده و Database Expert را انتخاب مي كنيم(از طريق منوي Crystal Reports\Database\Database Expert نيز قابل دسترس مي باشد.)در پنجره اي كه باز مي شود از طريق سمت چپ به تر تيب زير عمل مي كنيم:
Create New Connection\OLE DB(ADO)\در پنجره اي كه باز مي شود Microsoft OLE BD Provider for SQl Server را انتخاب وNext كنيد \Server موردنظر را خود را انتخاب كنيد

نكته:Server پيش فرض در همه ي سيستم هاlocalhost مي باشد.

Integrated Security را غير فعال كنيد و Database خود را از ليست پايين انتخاب كنيد.Next و سپس Finish را انتخاب كنيد.
سپس میتوانی فیلدهاتو درگ کنی به مکانی که میخوایی نمایش داده شود.

zayens
یک شنبه 26 اردیبهشت 1389, 00:44 صبح
خیلی ممنون از زحماتتان
کارهایی که گفتید انجام دادم
فقط در هنگام درخواست نام server مشکل پیش میاد
این کانکشن استرینگ من که در برنامه ام برای اتصال استفاده می کنم


Mycn = newSqlConnection("Server=MOHSEN-PC\\MYSQLSERVER;database=RESTAURANT;Integrated Security=True;");

نام سرور من MOHSEN-PC\MYSQLSERVER هست و دیتابیسم هم معلومه اما وقتی finish را میزنم پیغام میده...

Logon failed.
Detail: ADO Error Code:0x
Source: Microsoft OLE DB Provider for SQL Server
Description: The USE database statement failed because the database
collection Persian_100_CI_AI is not recognized by older client drivers.Tty
upgrading the client operating system or applying a service update to
the database client software, or use a different collection.
SQL State: 42000
Native Error:

behnam25214
یک شنبه 26 اردیبهشت 1389, 13:47 عصر
مشکل از دیتابیست هست موقع ایجاد نوعش رو Persian_100_CI_AI گرفتی واسه خاطر اون قبول نمیکنه یعنی اصلا Persian قبول نمیکنه اونو تغییر بدی درست میشه.:چشمک:

ezamnejad
یک شنبه 26 اردیبهشت 1389, 14:35 عصر
توی این لینک به طور کامل اموزش داده شده. دانلود کنید امیدوارم مشکل حل بشه
http://barnamenevis.org/forum/showthread.php?t=211652

behnam25214
یک شنبه 26 اردیبهشت 1389, 20:31 عصر
البته من هم با خواندن اون مقالات یاد گرفتم ولی اگه با اون روش ها هم بره واسه Persian خطا میده.

behnam25214
دوشنبه 27 اردیبهشت 1389, 22:50 عصر
مطابق تصویر زیر برو و Persian_100_CI_AI رو به Arabic یا هر چیزی غیر از Persian تغییر بده البته مشکل اصلی فکر کنم از #C باشه که Persian رو قبول نمیکنه.

zayens
دوشنبه 27 اردیبهشت 1389, 22:55 عصر
مشکل از دیتابیست هست موقع ایجاد نوعش رو Persian_100_CI_AI گرفتی واسه خاطر اون قبول نمیکنه یعنی اصلا Persian قبول نمیکنه اونو تغییر بدی درست میشه.:چشمک:

من که با دیتابیس کاری ندارم.
من با دیتاگرید کار دارم که از جدولی در sql پر میشه با دستور زیر :


//create proc USEDFOODSselectMonth
//@FOODDATE nvarchar(50)
//as
//select FOODNAME,sum(FOODNUM) as FOODNUM
//from RESTAURANT.dbo.USEDFOODS
//where LEFT(FOODDATE,7)=LEFT(@FOODDATE,7) group by FOODNAME
//go

یعنی عینا خود جدولی که در sql هست را نمی خوام.
جدولی را میخوام که با مثلا دستور بالا در دیتاگرید قرار گرفته...
چی کار باید کرد؟؟

behnam25214
سه شنبه 28 اردیبهشت 1389, 00:03 صبح
خیلی ممنون از زحماتتان
کارهایی که گفتید انجام دادم
فقط در هنگام درخواست نام server مشکل پیش میاد
این کانکشن استرینگ من که در برنامه ام برای اتصال استفاده می کنم


Mycn = newSqlConnection("Server=MOHSEN-PC\\MYSQLSERVER;database=RESTAURANT;Integrated Security=True;");
نام سرور من MOHSEN-PC\MYSQLSERVER هست و دیتابیسم هم معلومه اما وقتی finish را میزنم پیغام میده...

Logon failed.
Detail: ADO Error Code:0x
Source: Microsoft OLE DB Provider for SQL Server
Description: The USE database statement failed because the database
collection Persian_100_CI_AI is not recognized by older client drivers.Tty
upgrading the client operating system or applying a service update to
the database client software, or use a different collection.
SQL State: 42000
Native Error:


دوست عزیز گفتی اینجا این خطا رو داد منم نوشتم از روش زیر استفاده کن.یعنی پایگاه داده خودتو ویرایش کن.↓↓


مطابق تصویر زیر برو و Persian_100_CI_AI رو به Arabic یا هر چیزی غیر از Persian تغییر بده البته مشکل اصلی فکر کنم از C#‎‎ باشه که Persian رو قبول نمیکنه.

اگه طبق تصویر بری دیگه خطا هنگام اضافه کردن پایگاه داده نمیده.


من که با دیتابیس کاری ندارم.
من با دیتاگرید کار دارم که از جدولی در sql پر میشه با دستور زیر :


//create proc USEDFOODSselectMonth
//@FOODDATE nvarchar(50)
//as
//select FOODNAME,sum(FOODNUM) as FOODNUM
//from RESTAURANT.dbo.USEDFOODS
//where LEFT(FOODDATE,7)=LEFT(@FOODDATE,7) group by FOODNAME
//go
یعنی عینا خود جدولی که در sql هست را نمی خوام.
جدولی را میخوام که با مثلا دستور بالا در دیتاگرید قرار گرفته...
چی کار باید کرد؟؟

من متوجه نشدم ؟آخر چی میخوایی خب دستورات بالا رو که در استور پروسیجر نوشتی اگه درسته به کریستال ریپورت هم حتما میاره.:متعجب:

zayens
سه شنبه 28 اردیبهشت 1389, 07:43 صبح
دوست عزیز گفتی اینجا این خطا رو داد منم نوشتم از روش زیر استفاده کن.یعنی پایگاه داده خودتو ویرایش کن.↓↓
اگه طبق تصویر بری دیگه خطا هنگام اضافه کردن پایگاه داده نمیده.
بسیار ممنون

من متوجه نشدم ؟آخر چی میخوایی خب دستورات بالا رو که در استور پروسیجر نوشتی اگه درسته به کریستال ریپورت هم حتما میاره.
بله درست کار می کنه ولی...
در جدول، تاریخ با radioButtonهای مثل امروز یا این ماه مقدار میگرفت و به استورپرسیجر فرستاده میشد و طبق استوردپرسیجر بالا، دیتاگرید پر میشد
اما توی کریستال هنگام اجرا، مقدار FACTORDATE یا همون تاریخ را در پنجره ای جدا از ما می خواد که به صورت دستی وارد کنیم تا اون را مساوی FACTORDATE@ قرار بده.
چه جوری (مثلا با چه کدی) می تونم این مشکل را برطرف کنم؟ تا به محض اجرای کریستال گزارش را به ما بده؟
FACTORDATE را چه جوری باید به تابع استور پرسیجرم که الآن درکریستاله بفرستم؟

zayens
سه شنبه 28 اردیبهشت 1389, 11:15 صبح
دوستان دیگه هم اگه ممکنه کمک کنن

zayens
سه شنبه 28 اردیبهشت 1389, 12:52 عصر
دست همه درد نکنه
خودم جواب را پیدا کردم
باید از SetParameterValue استفاده می کردم

CrystalReport1 c = new CrystalReport1();
c.SetDataSource(DataViewEmp);
c.SetParameterValue("@FACTORDATE", frmReport.date);
crystalReportViewer1.ReportSource = c;

zayens
سه شنبه 28 اردیبهشت 1389, 14:04 عصر
یه سوال دیگه در همین زمینه
من سه تا database Fields از طریق database Expert به کریستالم اضافه کردم
(هر سه تا Fields ، مقادیر یکسانی دارند فقط یکیش جدوله و دو تای دیگه استورپرسیجر هستند که باید تاریخ را بگیره و نتیجه را نمایش بده)
چه جوری میشه تعیین کرد که کدوم Fields نمایش داده بشه؟
و یا چطور میشه تعیین کرد که مقداری که با SetParameterValue فرستاده میشه مربوط به کدام فیلد هست؟

zayens
سه شنبه 28 اردیبهشت 1389, 14:45 عصر
اصلا سوال قبلی ام درسته؟ یا اینکه من باید برای هر Fields یه ریپورت جداگانه درست کنم؟:گیج:
اینجوری که خیلی کریستال ریپورت باید add کنم!!:عصبانی++:

zayens
سه شنبه 28 اردیبهشت 1389, 22:27 عصر
خیلی ممنون:تشویق:
انگار باید این بار هم جوابم را خودم پیدا کنم:عصبانی:

خب یه نفر کمک کنه دیگه:گریه: