با عرض سلام
می خواستم ببینم به چه طرقی می توان در C# گزارش گیری کرد.
البته دیتابیس من اکسسه نه اس کیو ال
آیا با کریستال ریپورتم میشه گزارش گرفت؟ چطوری؟
فقط اگه ممکنه سریع. خیلی ممنون
با عرض سلام
می خواستم ببینم به چه طرقی می توان در C# گزارش گیری کرد.
البته دیتابیس من اکسسه نه اس کیو ال
آیا با کریستال ریپورتم میشه گزارش گرفت؟ چطوری؟
فقط اگه ممکنه سریع. خیلی ممنون
نبود.....
می خواهم از اطالاعات دیتابیسم (اکسس) گزارش و بعد از اون پرینت تهیه کنم
با چه ابزاری و به چه صورتی می تونم این کارو انجام بدم؟
یکم فوریه. لطفا...
سلام
پیش خودمان باشد ... !
گمان کنم مشکل آنجا است که کسی حال جواب دادن به این سوالات را ندارد
شما میتوانید از همان کریستال و یا سایر ابزارآلات گزارش گیری با هر بانک اطلاعاتی استفاده کنید.
به عنوان سمپل و نمونه کد میتوانید نگاهی به کد زیر بیاندازید:
support.h02.ir/fwlink/?LinkId=1003769457
برای کریستال...
پس از طراحی جداول بانک اطلاعاتی یک TypedDataSet به برنامه اضافه کرده و برنتامه را کامپایل میکنید و سپس یک گزارش کریستال هم اضافه میکنید و در ویزاد مربوطه آن TypedDataSet را به عنوان منبع اطلاعات مشخص کرده و گزارش را design میکنید.
در نهایت در برنامه با کمک دستور sql مطلوب و dataadapter یک dataset را پرکرده و تحویل نمونه گزارش میدهد.
به نمونه کد معرفی شده دقت کنید.
دمت گرم...
انشا الله همیشه با حال بمونی
دارم تست می کنم
اگه مشکلی داشتم دوباره همین جا مطرح می کنم
با تشکر
Last edited by ahmad_r; 03-08-2009 at 12:16.
ضمن تشکر به خاطر پاسخگویی شما دوست عزیز
ظاهرا با VS2008 نوشتید که من امکان دیدن ندارم اما با جستجو هایی که کردم یه چیزایی دست گیرم شد و یه گزارشایی گرفتم الان 2 تا سوال دارم
1_ من به طریق Wizard کریستال ریپورت یه گزارش از دیتا بیس رابطه ای خودم ساخته ام. در دستورات SQL این ویزارد یک پارامتر اضافه کردم به نام ID که می خواهم قبل از نمایش پنجره ورود اطلاعات آن (یعنی عکس زیر) خودم مقدار آن را وارد کنم.
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
2_ دیتا بیس اکسس من رمز دار است و برای هر گزارش از من پسورد می خواهد البته در موقع شناساندن فایل دیتا بیس در ویزارد پسورد را یکبار وارد کرده ام اما برای نمایش هر گزارش هم دوباره پسورد می خواهد چگونه می توانم جلوی نمایش این پنجره را بگیرم؟ یا با ورود پسورد قبل از نمایش به صورت کد و یا اصلا عدم نمایش پنجره
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
Last edited by ahmad_r; 03-08-2009 at 14:59.
سلام
البته میتوانید تک فایلهای کدها را در Notepad یا VS مشاهده کنید، فرق خاصی ندارد.ظاهرا با VS2008 نوشتید که من امکان دیدن ندارم
یک پارامتر اضافه کردم به نام ID که می خواهم قبل از نمایش پنجره ورود اطلاعات آن (یعنی عکس زیر) خودم مقدار آن را وارد کنم.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدشما در ویزارد خود کریستال را مستقیماً به دیتابیس وصل کرده اید، این کار برای کریستال چندان جالب توجه نیست و بعدً هم امکان تغییر در محتویات خروجی نمایشی در کریستال را سخت و شاید در برخی موارد غیر ممکن کند.دیتا بیس اکسس من رمز دار است و برای هر گزارش از من پسورد می خواهد
پیشنهاد میکنم مراحل گفته شده در پست 3 را مجدد انجام دهید و اول یک TypedDataSet بسازید و سپس از آن گزارش بسازید.
(بحرحال کریستال DataSet میسازد! چه بهتر که دیتاست را خودمان بسازیم تا نحوه جستجو و پرکردن و تغییر راحت ConnectionString و... هم دست خودمان باشد و همه با کدنویسی در دسترس باشند.)
اولا خیلی تشکر می کنم بابت جوابتون
اما باید بگم چون بار اولمه که می خوام از کریستال ریپورت استفاده کنم و تجربه کافی ندارم هنوز متوجه روشی که بیان کردید نشدم
مثلا اینکه TypedDataSet را چگونه باید ADD کنم
آیا منظورتون از "گزارش کریستال هم اضافه میکنید" CrystalReport Viewer است
چگونه "TypedDataSet را به عنوان منبع اطلاعات" معرفی کنم
همچنین آیا کد:
crystalreport rep = new crystalreport();
CrystalDecisions.Shared.ParameterDiscreteValue value = new CrystalDecisions.Shared.ParameterDiscreteValue();
value.Value = "Data";
rep.ParameterFields["ID"].CurrentValues.Add(value);
را باید در روش ذکر شده شما استفاده کنم؟
با تشکر
Last edited by ahmad_r; 06-08-2009 at 08:55.
سلام
توضیح مرحله به مرحله از ابتدا:
پروزه را در VS باز کنید و فرمان زیر را بدهید:
Project->Add New Item->DataSet
سپس در همان حال که TypedDataSet خالبی جلویتان باز است فرمان زیر را بدهید
Data->Add->TableAdapter
در دیالوگ مربوط دکمه New Connection را کلیک کنید.
در دیالوگ جدید دکمه Change را کلیک کنید و Data Source را به مورد زیر تغییر دهید:
(Microsoft Access Database File (OLE DB
مسیر و رمز و... فایل mdb را هم وارد کنید و دیالوگ را OK کنید.
وارد دیالوگ قبلی خواهید شد که سه بار Next کنید:
Next->Next->Next
در این مرحله دستور SQL مورد نظر خود را برای پر کردن DataSet وارد کنید
مثلاً
میتوانید از دکمه Query Builder هم کمک بگیرید.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دیالوگ را Finish کنید.
=====
کل پروژه تا این لحظه را Save کنید:
File->Save All
فرم TypedDataSewt و سایر فرمهای باز داخل VS را ببندید و پروزه را کامپایل کنید:
Build->Build Solution
یا
Project->Rebuild Solution
=====
حالا نوبت ساختا گزارش است:
Project->Add New Item->Crystal Report
دیالوگی ظاهر میشود که اجازه دهید همان Using the Report Wizard انتخاب باشد و OK کنید.
در فرم بعدی لیست درختی در سمت چپ میبینید که باید وارد شاخه زیر شوید:
Project Data->ADO.Net DataSet
و TypedDataSet تان را انتخاب کرده و با کمک دکمه فلش وسط ان را به لیست سمت چپ اضافه کنید.
دیالوگ را Finish کنید.
=====
حالا میتوانید گزارش خود را طراحی کنید و فیلدهای مربوطه را از toolbox گرفته وئ در محل مورد نظر و مطلوب گزارش رها کنید.
در نهایت هم کار را Save کنید.
=====
حالا دقیقاً میتوانید عین کدهای آن کد سمپل که معرفی کردم کار کنید و مثلاً برای چاپ گزارش، فرمان زیر را اجرا کنید:
=====کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگر خودتان دستی و به منظور خاصی پارامتری در گزارش کریستال بسازید با ان دستورات میتوانید مقدار دهی اش کنید ولی اگر منظورتان فیلتری برای دستور SQL-SELECT-WHERE بوده، دیگر نیازی به این کار نیست و پارامتر مذکور را به DataAdapter تان پاس میدهید که برای dataSet ساخته اید (یا خودکار ساخته شده.9را باید در روش ذکر شده شما استفاده کنم؟
موفق باشید.
از این بهتر نمی شد دستتون درد نکنه
فقط... به بعضی از قسمتهای کد شما در پروژه من گیر می داد خوب بعضیهاش که تفاوت نام بود که لامانع اما مثلا
dbDA.Fill(ret.DataTable1, fieldname); فقط یک پارامتر ورودی می پذیرفت.
کد زیر، کد شما در پروژه منه جاهایی که تغییر دادمو مشخص کردم(CHANGE) اگه میشه یه نگاهی بکنید ببینید صحیحه
private void Print_Click(object sender, EventArgs e)
{
this.CreateNewReport(this.CreateNewDataSet(14)).Pr intToPrinter(1, false, 1, int.MaxValue);
}
private CrystalReport2(CHANGE) CreateNewReport(DataSet1 datasource)
{
CrystalReport2(CHANGE) ret = new CrystalReport2()(CHANGE);
ret.SetDataSource(datasource);
return ret;
}
private DataSet1 CreateNewDataSet(int fieldname)
{
DataSet1 ret = new DataSet1();
using (DataSet1TableAdapters.DataTable1TableAdapter dbDA = new DataSet1TableAdapters.DataTable1TableAdapter()(CHA NGE))
{
//dbDA.Connection.ConnectionString = CONNECTIONSTRING;
dbDA.Fill(ret.DataTable1)(CHANGE);
}
return ret;
}
البته به این کد گیر نمی دهد مشکل سر همان پارامتر هاست
فکر می کنم باید قبل از dbDA.fill پارامتر را مقدار دهی کرده باشیم چرا که در موقع اجرا به این خط اررو می دهد
No value given for one or more required parameters
"پارامتر مذکور را به DataAdapter تان پاس میدهید" در dbDA هم پارامتر یا تابعی مبنی بر معرفی پارامتر پیدا نکردم.
لازم به ذکر است که پارامتر من در اصل یک فیلتر(Where) ساده در دستور سلکتی است که در قسمت ویزادر به صورت [ID] (شبیه پارامتر در اکسس) نوشته ام
.
.
.
.
لطفا....
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)