PDA

View Full Version : سوال: درخواست يك مثال عملي از گزارش گيري از يك ديتاگريدويو



navid1n2000
دوشنبه 02 شهریور 1388, 18:25 عصر
من يك مشكل اساسي دارمكه ماهها ست حل نشده
ميخوام يك ديتاگريد ويو رو بفرستم براي كريستال ريپورت
اين مسئله بيشتر به #C ربط داره تا گزارش گيري
خواهش كي كنم اگه كسي يك مثال عملي داره اينجا آپلود كنه تا مشكلم حل شه

moferferi
دوشنبه 02 شهریور 1388, 19:10 عصر
mycn = new SqlConnection(constr);
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "select * from jadval1";
cmd.Connection = mycn;
da = new SqlDataAdapter();
DataView dv = new DataView();
DataTable dt = new DataTable();
mycn.Open();
da.SelectCommand = cmd;
cmd.ExecuteNonQuery();
da.Fill(dt);
dv = dt.DefaultView;
mycn.Close();
//
CrystalReport1 rptmain = new CrystalReport1();
rptmain.SetDataSource(dv);
crystalReportViewer1.ReportSource = rptmain;هر ديتاگريدي مثلما اطلاعاتش را از يك منبعي مثل ديتاست يا ديتاويو پر ميكنه كافيه كه همون ديتاويو را به خاصيت setdatasource كريستال ريپورت نسبت بدي

navid1n2000
دوشنبه 02 شهریور 1388, 20:40 عصر
mycn = new SqlConnection(constr);
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "select * from jadval1";
cmd.Connection = mycn;
da = new SqlDataAdapter();
DataView dv = new DataView();
DataTable dt = new DataTable();
mycn.Open();
da.SelectCommand = cmd;
cmd.ExecuteNonQuery();
da.Fill(dt);
dv = dt.DefaultView;
mycn.Close();
//
CrystalReport1 rptmain = new CrystalReport1();
rptmain.SetDataSource(dv);
crystalReportViewer1.ReportSource = rptmain;هر ديتاگريدي مثلما اطلاعاتش را از يك منبعي مثل ديتاست يا ديتاويو پر ميكنه كافيه كه همون ديتاويو را به خاصيت setdatasource كريستال ريپورت نسبت بدي
خيلي ممنون
شما وقت دارين همينو توي يك پروژه ي عملي بنويسن و اينجا بذارين ؟؟؟؟؟؟؟؟؟
خيلي ممنون ميشم
من مشكلم اينه كه نمي دونم بايد توي فرم كريستال ريپورت جدول تعريف كنم . نميدونم اونجا بايد چه كار كنم؟؟؟؟؟؟؟؟

navid1n2000
سه شنبه 03 شهریور 1388, 14:22 عصر
كسي نيست كمكم كنه ؟؟؟؟؟؟؟؟؟؟؟
خيلي گيرم

corona
چهارشنبه 04 شهریور 1388, 00:47 صبح
ببین دوست من شما نحوه پر کردن یک دیتا تیبل رو که لطف کردن گفتن . ولی برای خود کریستال وقتی که یک کریستال ریپورت به پروژت اضافه کنی با ویزاردش که جلو بری بعد می تونی از توی قسمت project data و از زیر شاخه های اونAdo.net datasets هر چی دیتا ست تو برنامت داری رو نشون می ده خوب حالا گزارشی که میخوای بگیری اگه از یکی از جدول های اون دیتا ست هست که فقط کافیه اون جدول رو از سمت چپ انتخاب کنی و به سمت راستSelected Tables اضافه کنی و وقتی next زدی میتونی فیلدهایی که قراره تو گزارشت باشن رو انتخاب کنی و بعد هم finish کنی . حالا اگه اون گزارشی که میخوای بگیری فیلدهاش بر اساس کوئری هایی که نوشتی از چند جدول مختلف انتخاب میشه می تونی اونجایی که تو ویزارد جدول رو انتخاب کردی از تو دیتا ست به جاش اون stored procedure مورد نظرت رو انتحاب کنی . و بعد اگه تنظیمات اضافی لازم داشتی میتونی از توی field explorer انجام بدی . اینایی که من گفتم با گفته های دوست دیگمون مشکلت رو حل می کنه .

navid1n2000
چهارشنبه 04 شهریور 1388, 16:46 عصر
ببین دوست من شما نحوه پر کردن یک دیتا تیبل رو که لطف کردن گفتن . ولی برای خود کریستال وقتی که یک کریستال ریپورت به پروژت اضافه کنی با ویزاردش که جلو بری بعد می تونی از توی قسمت project data و از زیر شاخه های اونAdo‎.Net datasets هر چی دیتا ست تو برنامت داری رو نشون می ده خوب حالا گزارشی که میخوای بگیری اگه از یکی از جدول های اون دیتا ست هست که فقط کافیه اون جدول رو از سمت چپ انتخاب کنی و به سمت راستSelected Tables اضافه کنی و وقتی next زدی میتونی فیلدهایی که قراره تو گزارشت باشن رو انتخاب کنی و بعد هم finish کنی . حالا اگه اون گزارشی که میخوای بگیری فیلدهاش بر اساس کوئری هایی که نوشتی از چند جدول مختلف انتخاب میشه می تونی اونجایی که تو ویزارد جدول رو انتخاب کردی از تو دیتا ست به جاش اون stored procedure مورد نظرت رو انتحاب کنی . و بعد اگه تنظیمات اضافی لازم داشتی میتونی از توی field explorer انجام بدی . اینایی که من گفتم با گفته های دوست دیگمون مشکلت رو حل می کنه .
مشكل من اينه كه ديتا ستم با كد درست شده و توي اون قسمت ويزارد وجود نداره....
راه حل اين چيه :؟؟؟؟

navid1n2000
پنج شنبه 05 شهریور 1388, 09:10 صبح
من پروژم آماده ست. فقط همين قسمت گزارش گيريم مونده . . .
لطفا به دادم برسين

farzaneh.sh
پنج شنبه 05 شهریور 1388, 12:47 عصر
با سلام... من چند وقت پیش به یک همچین مشکلی بر خوردم...امیدوارم راهی که من انتخاب کردم به درد شما به خوره...البته حتما راههای دیگه ای ممکنه باشه..
من یک Datatable داشتم که در حین برنامه ساخته می شد و از آن می خواستم گزارش بگیریم...
من به این صورت عمل کردم که DataTable خود را به Xml تبدیل کردم و سپس Xml را به عنوان Source کریستال ریپورت قرار دادم به صورت زیر:

ابتدا این Name Space ها را به پروژه اضافه کنید..

using System.IO;
using System.Xml;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using CrystalDecisions.ReportSource;



ابتدا در برنامه خودم آمدم از یک تکه کد استفاده کردم و Data Table خودم را به Xml تبدیل کردم..
با این کد:

private static string ConvertDataTableToXML(DataTable dtBuildSQL)
{

DataSet dsBuildSQL = new DataSet();
StringBuilder sbSQL;
StringWriter swSQL;
string XMLformat;

sbSQL = new StringBuilder();
swSQL = new StringWriter(sbSQL);
dsBuildSQL.Merge(dtBuildSQL, true, MissingSchemaAction.AddWithKey);
dsBuildSQL.Tables[0].TableName = "Table";
foreach (DataColumn col in dsBuildSQL.Tables[0].Columns)
{
col.ColumnMapping = MappingType.Attribute;
}
dsBuildSQL.WriteXml(swSQL, XmlWriteMode.WriteSchema);
XMLformat = sbSQL.ToString();
return XMLformat;



{


الان Xml شما در یک string ذخیره شده است.سپس آن را تبدیل به یک فایل Xml کردم..با این کد:





private void Convert_Into_Xml_File(string String_xml_file,string Name_Xml_File)

{
try
{
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(String_xml_file);
string directoryString = Directory.GetCurrentDirectory() + @"\Xml_Dir";
string File_Name_Tabel = directoryString + "\\" + Name_Xml_File + ".xml";
xDoc.Save(File_Name_Tabel);
}
catch
{ }

}



برای این تابع دو ورودی گذاشتم:
1- خود فایل xml که در تابع قبلی به دست آمده بود و در یک string ذخیره شده بود.
2- Name_Xml_File که نام انتخابی من برای فایل Xml است.
سپس باید برنامه را اجرا کنید که فایل Xml شما ساخته شود.

سپس که فایل Crystal Report به پروژه خودتان اضافه کنید.
سپس در field Explorer در قسمت Data Base بروید و کلیک راست کنید و سپس گزینه Data Base Export را انتخاب کنید..
سپسبه صفحه جدید وارد می شوید که شما باید در اینجا Data Source خوتان را انتخاب کنید...که در واقع ما باید فایل Xml که ایجاد کردیم به عنوان دیتا سورس انتخاب کنیم..
در فولدر Create New Connestion زیر فولدر Ado‎‎.Net را انتخاب و Make New Connection را انتخاب کنید و در صفحه جدید باید مسیر( File Path) فایل Xml را انتخاب کرده و به آن انتصاب دهید..
در واقع الان این فایل xml را به عنوان دیتا سورس انتخاب کرده اید...
و الان شما می توانید هر کئام از فیلدها را که می خواهید ندر گزارش گیری نمایش دهید مشاهده کنید...

و حالا در کد نویسی خود صفحه هم این گونه کد می نویسید:
ابتدا مسیر فایل Crystal Report را به یک متغیر از نوع report Document می دهیم.




string Path_report = Application.StartupPath + @"\Report\Crystal1.rpt";
ReportDocument Rd = new ReportDocument();
Rd.Load(Path_report);
Rd.SetDataSource(Data_Tb);

برای DatSource متغیر reportDocumnet باید Data Table خود را به آن اختصاص دهید که در اینجا من به نام Data_Tb معرفی کردم..
سپس یک CrystalReport Viewer به پروژه خود اضافه کنید
سپس reportSource برای این CrystalReport Viewer را برابر با متغیری که از جنس
ReportDocument ساخته اید بدهید.

Report_Viwer.ReportSource = Rd;
امیدوارم مطلب من مفید واقع شده باشد.

moferferi
جمعه 20 شهریور 1388, 00:49 صبح
مشكل من اينه كه ديتا ستم با كد درست شده و توي اون قسمت ويزارد وجود نداره....
راه حل اين چيه :؟؟؟؟

سلام.نمیدونم هنوز مشکلت حل شده یا نه.
شما اول یه ایتم کریستال ریپورت را به برنامت اضافه کن
2.انتخاب using the report wizard
3.create a new conection
4.oledb(ado)
5.microsoft oledb provider for sqlserver )البته اگه دیتابیست اس کیو ال هست)
6.تنظیمات کانکت به دیتابیس
7.حالا باید جدول هایی که میخوی را add کنی
8.اضافه کردن ستون هایی از جداولت که میخوای تو گزارش باشه.

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

saeeedft
جمعه 20 شهریور 1388, 04:11 صبح
سلام، از اولین روزی که برنامه نویسی رو شروع کردم دنبال یه راه حل برای این سوالم و تا به حال به جایی نرسیدم،لطفا هر کس میتونه راهنمایی کنه

navid1n2000
شنبه 21 شهریور 1388, 00:25 صبح
سلام.نمیدونم هنوز مشکلت حل شده یا نه.
شما اول یه ایتم کریستال ریپورت را به برنامت اضافه کن
2.انتخاب using the report wizard
3.create a new conection
4.oledb(ado)
5.microsoft oledb provider for sqlserver )البته اگه دیتابیست اس کیو ال هست)
6.تنظیمات کانکت به دیتابیس
7.حالا باید جدول هایی که میخوی را add کنی
8.اضافه کردن ستون هایی از جداولت که میخوای تو گزارش باشه.

حالا طبق کدی که واست فرستادم باید دیتاستت را به کریستال ریپورت پاس بدی.
در ضمن فرقی نداره که دیتاستت از طریق کد درست شده یا از طریق ویزارد.
شما باید اون نمونه ای که از دیتاستت درست کردی (که شامل یک سری جداول است)را به کرستال ریپورتت پاس بدی.
که البته میتونی این کار را با یک دیتاویو انجام بدی.همون کاری که من کردم.اینطوری میتونی گزارشت را خیلی راحت بر اساس یکی از ستون ها مرتب کنی
خوب وقتي ديتاستو با كد درست كنم ديگه توي اون جدول وجود نداره كه بخوام انتخابش كنم.توي اونجا فقطديتا ستايي هست كه با ويزارد درست شده

moferferi
شنبه 21 شهریور 1388, 22:31 عصر
سلام .دوست من مگه میشه دیتاست (حالا چه از طریق کد چه از طریق ویزارد درست شده باشه )توش جدول نباشه.اصلا وقتی شما مینویسی

MYDATAADAPTER.FILL(DS)
داری یک سرس جدول را توی دیتاستت وارد میکنی.
فردا حتما یه سورس واست میزارم.

saeeedft
یک شنبه 22 شهریور 1388, 01:17 صبح
دوست عزیز مشکلی که هست اینه که دیتا ست اینجا در زمان اجرا ساخته میشه و نه به صورت ویزاردی،ما منتظر راه حل شما هستیم

corona
یک شنبه 22 شهریور 1388, 09:58 صبح
سلام به همگی . ببینید من قبلا توضیح دادم که به چه صورت باید کار کنید . منم خودم جدولی که میخواستم ازش گزارش بگیرم در زمان اجرا ایجاد می شد . خوب روالش به این صورته دیگه شما یا کدی که جدول شما وفیلد های مورد نظرتون رو ایجاد می کنه یا تو یه stored procedure دارین که اجراش که می کنید نتیجش رو میریزین تو یه دیتا تیبل یا این کوئری مورد نظرتون رو جلوی دستور sqlcommand مثلا به این صورت می نویسید


sqlcommand cmd = new sqlcommand ("select name , surname from table",connection);

راهی که من پیشنهاد میکنم و بارها ازش استفاده کردم اینه کوئری خودتون رو به این صورت ننویسید و همین کوئری رو تو به sp بزارید و بعد sp رو اجرا کنید هم از نظر کارایی بهتر میشه براتون هم برای گزارشمون . خوب حالا چیزی که نیاز داریم اینه که یک دیتا ست تو برنامتون داشته باشید اگه ندارید ازAdd New Item یکی اضافه کنین و روش کلیک کنید تا محیط design اون تو فرو ادیتور باز بشه ، خوب حالا سرور اکسپلورر رو باز کنید و دیتابیس پروژتون اگه نیست اونجا ادش کنید ، حالا که دیتا بیس تو سرور اکسپلورر بازه برین تو قسمت Stored procedure هایی که برای دیتابیستون ایجاد کردین و اون sp هایی رو که براتون جدولهای گزارش رو ایجاد می کنن درگ کنید ، داخل محیط design دیتاست که تو فرم ادیتور باز کردیمش ولش کنید ، می بینید که sp شما به دیتاست اضافه شده. خوب مرحله اصلی تمومه . حالا یک CrystalReport به پروژتون add کنید و ازویزارد تنظیمات اون دیتاست که به پروژه اضافه کردیم رو می بینید و زیرمجموعه اون ، sp که بهش اضافه کرده بودیم . حالا همون sp مورد نظرتون رو با فلش سمت راست به گزارش اضافه کنید و Next , و در این مرحله فیلدهایی رو که میخوان تو گزارش نشون داده بشه رو اضافه کنید و تمام . حالا میمونه کارای سی شارپش (crystal report viewer , crystal report document ) که اساتید کامل توضیح دادن و من دیگه جسارت نمی کنم . ببخشید اگه طولانی شد .سوالی بود در خدمتم .

moferferi
یک شنبه 22 شهریور 1388, 16:32 عصر
سلام.طبق قولی که داده بودم یه سورس واست گذاشتم.
به همراه چند تا عکس از نحوه ساختن یک فایل گزارش.
اینم لینکش:


دانلود کنید (http://www.2shared.com/file/7769372/a20bc289/crystall_report_learning.html)
حجم :783 کیلو بایت

navid1n2000
یک شنبه 22 شهریور 1388, 20:29 عصر
سلام.طبق قولی که داده بودم یه سورس واست گذاشتم.
به همراه چند تا عکس از نحوه ساختن یک فایل گزارش.
اینم لینکش:


دانلود کنید (http://www.2shared.com/file/7769372/a20bc289/crystall_report_learning.html)
حجم :783 کیلو بایت
لينكت مشكل داره
ميشه تو همين سايت آپلود كني؟؟؟؟؟؟؟؟؟؟؟

saeeedft
دوشنبه 23 شهریور 1388, 02:02 صبح
ممنون دوست عزیز،یه تست کنم ببینم چطوری هستش،خدا کنه جواب بده

moferferi
دوشنبه 23 شهریور 1388, 11:26 صبح
سلام
لینک مشکلی نداره .من همین امروز چک کردم.اون پائین صفحه روی
save file to your pc click here کلیک کنید

Frozenheart
چهارشنبه 01 مهر 1388, 22:18 عصر
سلام دوستان.
اگه بخواهیم محتویات یک DataGridView رو که در برنامه فیلتر میشه و حتی امکان داره تعداد ستون هاش متنوع باشه رو یه کریستال ریپورت بفرستیم باید چکار کنیم؟ نکته قابل ذکر اینه که دیتا سورس DataGridView که Datatable هست ویزاردی ساخته نشده و از طریق کد ساخته میشه. چون قراره از جداول گوناگونی بخونه.

navid1n2000
دوشنبه 27 مهر 1388, 20:28 عصر
هنوز من جوابمو نگرفتم