PDA

View Full Version : سوال: نحوه تنظیم Dataset جهت نمایش اطلاعات در Crystal Report



sahel65
یک شنبه 27 اسفند 1391, 23:45 عصر
سلام دوستان؛
ببخشید که سوالمو اینجا مطرح میکنم ؛ آخه تو تالار crystal report کسی جوابمو نداد.
میشه بگید Dataset رو چجوری تنظیمش کنم که اطلاعات رو نشون بده:
اینهم کد من:

private void BtnShow_Click(object sender, EventArgs e)
{
ReportDocument rd = new ReportDocument();
rd.FileName = "PersonnelReport.rpt";
DataSet1 Ds = new DataSet1();

crystalReportViewer1.ReportSource = rd;

crystalReportViewer1.Show();


/*
* // rd.SetDataSource("personnel Query2");
ReportDocument report = new ReportDocument();
report.Load("PersonnelReport.rpt");
*/



}

sahel65
دوشنبه 28 اسفند 1391, 09:47 صبح
دوستان عزیز کسی نبود جواب من رو بده؟؟؟
الان گزارشی که میگیریم خالیه و چیزی نشون نمیده.
ممنونم ازتون.

veniz2008
دوشنبه 28 اسفند 1391, 10:03 صبح
سلام. من از یک دیتاتیبل استفاده کردم (dt همون دیتاتیبل من هست که قبلا نتیجه کوئری خودم رو داخلش ریختم) و نتیجه کوئری خودم رو جهت نمایش به reportviewer دادم. من معمولا فایل کریستال رو کنار فایل اجرایی نگه میدارم تا راحت تر آدرس دهی بشه (فقط نام فایل رو ذکر میکنم).

ReportDocument rd = new ReportDocument();
rd.Load(CrtReport.rpt");
rd.SetDataSource(dt);
CrystalReportviewer1.ReportSource = rd;
CrystalReportviewer1.Show();

sahel65
دوشنبه 28 اسفند 1391, 10:49 صبح
خیلی خیلی ممنونم دوست عزیزم
من هم تقریبا این روش رو یکم بلد بودم فقط بلد نیستم نتیجه کوئری رو بریزم تو یه دیتا تیبل! میشه کمکم کنید. خیلی واجبه و بهش نیاز دارم.
راه اینکه یک خروجی دیتا تیبل بگیرم رو میشه بگید. ممنونم.

veniz2008
دوشنبه 28 اسفند 1391, 11:09 صبح
اینطوری میشه دیتاتیبل رو پر کرد :

SqlConnection con = new SqlConnection("Data Source = .\\Wincc;Initial Catalog=tel;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM tell",con);
DataTable dt = new DataTable();
da.Fill(dt);

sahel65
دوشنبه 28 اسفند 1391, 11:47 صبح
دوست عزیزم ممنونم؛ ولی من همچنان نیازمند راهنمایی هاتون هستم.
ببینید من اشتباه کردم و اومدم بانک رو اکسس انتخاب کردم؛ که اگه بتونم تو این چند روز تعطیلی حتما عوضش می کنم.
ببینید من کد رو اینجوری نوشتم ولی بازهم گزارشات سفید نشون داده میشه!!
ضمنا آیا میتونه به این خاطر باشه که من وقتی از حالت ویزاردی استفاده می کردم فقط 5 تا فیلدشو گذاشتم تو صفحه و الان دارم دستور میدم که همه رو انتخاب کن:(select * from personnel)؟؟ نمیخواد فقط فیلدهایی رو که از ویزارد انتخاب و تو صفحه گذاشتم رو تو اینجا ذکر کنم؟
بهر حال این کد من هستش: میشه کمکم کنید؟؟ ممنون میشم.

public DataTable Select()
{

string cs = "'Provider =Microsoft.ACE.OLEDB.12.0';Data Source='C:\\Documents and Settings\\sahel\\My Documents\\employee.mdb'";
OleDbConnection conn = new OleDbConnection(cs);
OleDbDataAdapter da = new OleDbDataAdapter();
da.SelectCommand = new OleDbCommand("Select * from personnel", conn);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}

private void BtnShow_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
personnel p = new personnel();
ReportDocument rd = new ReportDocument();
rd.Load("PersonnelReport.rpt");
rd.SetDataSource(dt.Select());
crystalReportViewer1.ReportSource = rd;
crystalReportViewer1.Show();
}

veniz2008
دوشنبه 28 اسفند 1391, 12:04 عصر
چندتا مورد رو میگم اعمال کنید :
اولش در مورد تابع select شما که یه دیتاتیبل برمیگردونه. مقدار دریافتی رو درون دکمه خودتون رو بصورت زیر دریافت کنید :

private void BtnShow_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt = Select();
ReportDocument rd = new ReportDocument();
rd.Load("PersonnelReport.rpt");
rd.SetDataSource(dt);
crystalReportViewer1.ReportSource = rd;
crystalReportViewer1.Show();
}
مورد بعدی اینه که وقتی چیزی رو نمیخواید استفاده کنید چرا بی جهت اونو new می کنید ؟ (منظورم personnel p = new personnel(); هست )
مورد سوم که احتمال زیاد رعایت نکردید ساخت یک دیتاست هست که به کریستال باید وصل بشه. شما میتونی از منوی data و گزینه add new datasource دیتابیس و جدول خودتون رو در قالب یک دیتاست بسازید و اونو به کریستال وصل کنید.

sahel65
دوشنبه 28 اسفند 1391, 13:16 عصر
متشکرم.
من کد رو اینطور و طبق گفته شما تغییر دادم:

private void BtnShow_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
ReportDocument rd = new ReportDocument();
rd.Load("PersonnelReport.rpt");
rd.SetDataSource(dt);
crystalReportViewer1.ReportSource = rd;
crystalReportViewer1.Show();
}


بازهم سفید و بدون دیتا نشون داد. راستش دارم گیج میشم؛ ببینید مگه همون اول که کریستال ریپورت رو میخواستم بیارمش تو صفحه خوب به دیتای مورد نظرم وصل کردم.
عکس رو ببینید:

http://upload.tehran98.com/img1/9jgqh8ap3eri3lppwgyi.jpg


و اینهم نمایی از solution برنامه:

http://upload.tehran98.com/img1/wpx2oeu200pt70u97py.jpg


اینکه میگید Dataset رو تنظیم و متصلش کنم آیا کار دیگه ای باید انجام داد؟
خیلی ببخشید.

veniz2008
دوشنبه 28 اسفند 1391, 13:23 عصر
بابت دیتاست نه نیاز یه انجام کار جدیدی نیست و منظورم همون مرحله اول هست که باید دیتاست (همون جدولی که داخلش قرار داره و قراره ازش گزارش گرفته بشه) رو به کریستال وصل کنید که گفتید انجام دادید. ولی دوست من چرا دیتاتیبل رو مقدار دهی نکردید؟ شما یک خط از کدی رو که من گفتم و دیتاتیبل رو پر میکنه رو فراموش کردی بذاری. یه دیتاتیبل خالی که نمیتونه چیزی رو نشون بده. (dt شما باید مقدار خودش رو از متد select بگیره که شما یه خروجی از نوع دیتاتیبل واسش معرفی کردی) :

private void BtnShow_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt = Select();
ReportDocument rd = new ReportDocument();
rd.Load("PersonnelReport.rpt");
rd.SetDataSource(dt);
crystalReportViewer1.ReportSource = rd;
crystalReportViewer1.Show();
}

ehsan957
دوشنبه 28 اسفند 1391, 13:27 عصر
دقیقا من هم همین مشکل را دارم، لطفا راهنمایی کنید

sahel65
دوشنبه 28 اسفند 1391, 13:34 عصر
مجددا ممنونم ازتون؛
فکر کنم داریم به یه جاهایی می رسیم.
ببینید بعد از اینکه گذاشتم و اجرا کردم این پیغام رو داد:
(فکر کنم جای امیدواری داره و داره وصل میشه)


http://upload.tehran98.com/img1/as490rv2d6wz3rbfun.jpg

veniz2008
دوشنبه 28 اسفند 1391, 13:42 عصر
به احتمال زیاد مشکل از کانکشن استرینگ شماست. کانکشنی که نوشتید رو بذارید.

sahel65
دوشنبه 28 اسفند 1391, 15:37 عصر
دوست عزیزم کانکش رو قبلا تو چند پست قبلی گذاشتم؛ فکر کنم منظورتون همین باشه: درسته:

public DataTable Select()
{

string cs = "'Provider =Microsoft.ACE.OLEDB.12.0';Data Source='C:\\Documents and Settings\\sahel\\My Documents\\employee.mdb'";
OleDbConnection conn = new OleDbConnection(cs);
OleDbDataAdapter da = new OleDbDataAdapter();
da.SelectCommand = new OleDbCommand("Select * from personnel", conn);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}

veniz2008
دوشنبه 28 اسفند 1391, 16:16 عصر
اگر در طول برنامه با کانکشن استرینگی که خودتون نوشتید مشکلی ندارید و برنامه بدرستی کار میکنه همون مال خودتون رو بذارید باقی بمونه ولی اگه کلا هیچ کاری نمیتونید باهاش انجام بدید (نه درج نه حذف نه ویرایش و ...) از کانکشن استرینگی که میگم استفاده کنید :

string cs = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Documents and Settings\\sahel\\My Documents\\employee.mdb";
دقیقا چیزی رو که گذاشتم جایگزین مال خودتون کنید.

sahel65
دوشنبه 28 اسفند 1391, 16:32 عصر
خیلی خیلی ممنون دوست عزیزم؛
مشکل حل شد و اطلاعات قابل مشاهده هستند. مرسی
ببخشید حسابی اذیت شدید امروز.
فقط میشه بگید چه تفاوتی داشت کانکشن شما با من؟
ضمنا من اگه بخوام در فرمهای دیگه تغییر، ویرایش و یا حذف رو انجام بدم اشکالی نداره که؟ این کانکشن شما مگه چه تفاوتی داشت که باعث شد پیغام خطا دیگه ظاهر نشه؟؟
همچنین اگه بخوام تو هر صفحه فقط فیلدهای یک نفر مشاهده بشن و خودم یک سری متن اضافه کنم ، کریستال رو به حالت سفارشی خودم در بیارمش؟
بازهم ازتون ممنونم.
خیلی کمکم کردید. دیگه خسته شده بودم.

esafb52
دوشنبه 28 اسفند 1391, 17:17 عصر
دوتا تک کوتیشن قبل از cو بعد از d
'C:\\Documents and Settings\\sahel\\My Documents\\employee.mdb'