Crystal Reports
مقدمه:
امروزه با توجه به حجم وسیع اطلاعات، استفاده از Database در برنامه ها به جزء لاینفک تبدیل گشته است. حال با توجه به اینکه در زمینه های تجاری (و یا زمینه های غیرتجاری با حجم زیاد اطلاعات) ارائه ی گزارش از این Database ها، امری الزامی در یک نرم افزار و یا یک شبکه است، لازم است که ساختاری مناسب جهت انجام این مهم ایجاد شود.
سالها پیش متخصصان بعد از ایجاد کامل نرم افزار، مجبور به صرف زمان قابل توجهی (گاهی به اندازه نیمی از زمان ایجاد نرم افزار) برای ساخت و مدیریت این گزارش ها بودند، به خاطر اینکه مجبور می شدند علاوه بر ایجاد اطلاعات گزارش، آنرا (به عنوان مثال) داخل یک صفحه A4 قرار دهند، به صورتی که هم قابل چاپ (بدون هیچ نرم افزار کمکی) باشد، و هم با تقسیم اطلاعات در صفحات پشت سر هم، فرمت و قالب بندی آنها بدون تغییر باقی بماند. طی چند سال اخیر، روش ها و نرم افزار های متعددی از شرکت های مختلف برای حل این معزل و کمک به برنامه نویسان ارائه شد.
Crystal Report چیست ؟
یکی از نرم افزارهای بی نقص در Visual Studio هست .
Crystal Report از سال ۱۹۹۳ به عنوان قسمتی (Plug ins ) از Vstudio در آمده و الان هم استاندارد گزارش گیری در Vstudio شده است و در همه نسخه هایProfessional و بالاتر این نرم افزار ارائه میشود .
CR قابلیت پرسش و پاسخ و تعامل با برنامه های ویندوزی را فراهم میکند (یعنی Interface را زنده میکند )
با این نرم افزار میشود گزارش های حرفه ای و پیچیده از برنامه های ویندوزی در قالب یک Interface ساده , ایجاد کرد .
آنوقت میشود از این گزارش ها به عنوان گزارش های استاندارد بانک های اطلاعاتی استفاده کرد
به بیان ساده تر کاری را که در SQL Server و به هزار مکافات برای گزارش گیری باید انجام داد , CR به صورت ویزاردی و در آن واحد انجام میدهد .
میشود گزارش ها را در این نرم افزار در قالب و فرمتی که مد نظرمان هست Customize کنیم .در محیط Web و اینترنت هم قابل استفاده هست …
در واقع در محیط های ویندوزی و HTML میشود از گزارش های CR استفاده کرد .
انواع نمودار ها و Search و امکانات دیگری هم میشود به گزارش ها اضافه کرد .در برنامه ها میشود از کلاسها و Object هایی مثل CrystalReportViewer برای اضافه کردن گزارش به برنامه استفاده کرد .
نصب برنامه CrystalReport. Net
مرحله اول: روی Solution وسپس روی Add New Project راست کلیک کنید.
SetUp and Deployment Projects و سپس Setup Project را انتخاب کنید. به setupتان را نامگذاری کنید.
مرحله ۲: اضافه کردن فایل Exe و فایلهای دیگر
در File System، روی Application Folder کلیک راست کنید (معمولاً این کار پوشه ای را در Win/Sys ایجاد می کند) سپس Add > Project Output > و سپس Primary output و فایلهای لازم دیگر را انتخاب کنید.
تا اینج فراید معمول نصب کردن بود. اگر برنامه شما Crystal Reports را هم در بر بگیرد، باید چند کار دیگر هم بکنید.
اضافه کردن Merge Module:
روی Setup project > Add > Merge Module > کلیک راست کنید.
ابتدا Crystal_regwiz2003.msm و سپس Crystal_Managed2003.msm و Crystal_Database_Access2003_enu.msm و Crystal_Managed2003.msm را انتخاب کنید.
روی Open کلیک کنید.
حالا چبز مهم این است که وقتی این Set up را روی یک سیستم دیگر اجرا می کنید، با این error مواجه می شوید: Keycode32.Dll
دلیل این error، ندادن Registration key به فایل Merge Module است.
Crystal_regwiz2003.msm، جهت انجام این کار روی Crystal_regwiz2003.msm کلیک راست کنید و Properties را انتخاب کنید.
در Properties، (Merge Module Properties)را انتخاب کنید و key را در License Key وارد کنید.
حالا License key می تواند Crystal Report product key باشد، یا می توانید آنرا از منوی Help > About Microsoft Development Environment بدست آورید.
در آنجا رشته (string) Crystal Reports for Visual Studio .NETAAP50-GS00000-U7000RN را خواهید دید (ممکن است برای نسخه های دیگر متفاوت باشد). Key شما is’AAP50-GS00000-U7000RN’ است.
حالا solution را بسازید، و set up شما آماده است.
راهنمای Crystal Reports
کارکردن با Crystal Reports آسان نیست، و عیب و ایرادهای زیادی دارد.
یکی از بدترین ویژگی های Crystal Reports، روش مدیریت کردن پارامترهای گزارش توسط نمایش دادن هر پارامتر در یک صفحه جدا است که clientها واقعاً از آن بیزارند. برای حل این مشکل، این مقاله به شما نشان خواهد داد چگونه همه پارامترهای یک فایل .rpt را در یک صفحه واحد به کاربر نشان دهید.
این مقاله، گزارشهایی را که از در صفحه استفاده می کنند، نشان می دهد، یک Reports Viewer و یک Parameters Viewer. می توان این صفحه ها را با هم ترکیب کرد که بسیار آسان است. این صفحه ها شامل موارد زیر می شوند:
• Reports Viewer: این صفحه دارای یک ComboBoxاست که لیستی از گزارشهایی را که کاربر می تواند انتخاب کند نشان می دهد. وقتی کاربر دکمه “Get Report” را فشار می دهد، یک پنجره که Parameters Viewer نامیده می شود باز می شود.
• :Parameters Viewer این صفحه پارامترهای موجود در گزارشی را که در یک datagrid انتخاب شده نمایش می دهد، و ما به طور پویا (dynamic) کنترلهایی را به آن اضافه می کنیم تا valueهای انتخاب پارامتر را راحتتر کنیم. بعد از انتخاب valueهای پارامتر گزارش انتخابی، کاربر Parameters Viewer را می بندد و Reports Viewer، گزارش انتخاب شده را با پارامترهای انتخاب شده نمایش می دهد.
Crystal Reports، یک فایل باینری rpt ایجاد می کند که شامل همه اطلاعاتی می شود که برای نمایش هر گزارشی نیاز داریم.
• فایل *.rpt را انتخاب کنید.
• اطلاعات پارامتر را مستقیماً از فایل *.rpt بخوانید.
• جدولی ایجاد کنید که همه پارامترهای انتخاب شده در فایل *.rpt را نمایش دهد.
• جدول پارامتری که ایجاد می کنیم، باید همه کنترلهایی را هم که انتخاب پارامترهای ایجاد شده از قبیل تقویم، checkboxها، و غیره، را برای کاربر راحت می کنند، در بر بگیرد.
• باید کنترلهای اعتبار سنجی ای از داده های پارامتر ایجاد کنیم که از فایل *.rpt خوانده ایم.
• نهایتاً، داده های پارامتر را به Crystal Viewer ارسال می کنیم و Crystal Report انتخابی مان را نمایش می دهیم.
• اطلاعات Database connection را از فایل*.rpt خوانده می شود.
خواندن داده های پارامتر از فایل های *.rpt
ما با ستونهای از پیش تعریف شده Datagrid پارامترهایمان از قبیل Parameter، Kind، Value، Min، Max، Prompt شروع کردیم. و هر نوع پارامتر را به عنوان یک ردیف جدید در datagrid مان اضافه خواهیم کرد.
• BooleanParameter
• CurrencyParameter
• DateParameter
• DateTimeParameter
• NumberParameter
• StringParameter
• TimeParameter
برای ساختن یک datagrid پارامترها، پارامترها را به صورت زیر از فایل *.rpt می خوانیم:
CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinitions crParamFieldDefinitions
= crDoc.DataDefinition.ParameterFields;
foreach (CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinition _
def in crParamFieldDefinitions)
برای هر پارامتر در حلقه foreach، یک ردیف جدید با datagrid پویا که ستونهای از پیش تعریف شده دارد، اضافه می کنیم. اضافه کردن کنترل به Datagrid پارامترها
چیزی که در مورد datagrid پارامترمان عجیب است، این است که ما هر پارامتر را به عنوان ردیفی جدید به جای ستون جدیدی، که در datagridها رایج تر است، اضافه می کنیم. این بدین معناست که باید یک از یک روش متفاوت برای اضافه کردن کنترلهای کاربر استفاده کرد. بدین منظور، باید از GotFocus event of the datagrid جهت حذف یا اضافه کردن کنترلها بر اساس نوع پارامتر که در ستون دوم datagrid لیست شده، استفاده کرد.
به همین جهت، من فقط سه نوع کنترل را پیاده کردم:
• DateTime
• TimePicker
• CheckBox
به عنوان مثال، وقتی کاربری روی datagrid کلیک می کند، اگر ستون ۲، دارای یک value ی DateTime باشد، آنگاه یک کنترل DateTime در سلول داده (data cell) ظاهر می شود که کاربر DateTime را انتخاب کند. در اینجا باید اشاره کرد که بعضی از برنامه نویسان استفاده از “Radio Button” را برای value های Boolean ترجیح می دهند. واضح است که شما می توانید از هر کنترلی که دوست دارید یا client درخواست می کند، استفاده کنید.
کنترل DateTime Picker
DateTime Picker، یک کنترل است که به کاربر اجازه می دهد یک valueی date، datetime یا یک valueی time را انتخاب کند و دو رابط (interface) مجزا بزای یک Calendar و یک Time Spinner در اختیار می گذارد.
کنترل DataTime
جهت تنظیم کنترل DateTime به عنوان یک Time Spinner، ShowUpDown Boolean property را روی true قرار دهید، و Format property را به Time value تغییر دهید. Time Picker control، یک دکمه spin است که از بخشهای مختلفی تشکیل شده است. مقدار ساعت (hours value)، مقدار دقیقه (minutes value)، مقدار ثانیه (seconds value) که اختیاری است و رشته (string) AM/PM. جهت تغییر زمان، کاربر روی یک بخش کلیک می کند و از ماوس یا کیبورد جهت افزایش یا کاهش یک مقدار استفاده می کند. جهت تغییر داده مقدار دیگر، کاربر ابتدا باید روی آن کلیک کند و سپس از دکمه spin استفاده کند.
به طور پیش فرض، time با استفاده از فرمت H:M:SS AM/PM نمایش داده می شود. این بدین معناست که time از عدد ۱ برای ساعتهای ۰ تا ۹، و دقایق ۰ تا ۹، و ثانیه ای ۰ تا ۹؛ و از AM یا PM برای نشان دادن صبح یا بعداز ظهر استفاده می کند. جهت سفارشی کردن روش نمایش دادن time، ابتدا Format property را به Custom تغییر دهید. سپس، در CustomFormat property، از ترکیبی از این کارکترها جهت ایجاد یک فرمت سفارشی استفاده کنید: hh:mm:tt. اگر بخواهید زمان متفاوتی را تنظیم کنید، ترکیب Format را به Value property اعمال کنید. به همان طریق، می توانید مقدار time روی کنترل را با دسترسی به Value property بازیابی کنید.
نکات جالب
خروج فایلها (File Experts)
می توان گزارشهای بارگذاری شده را در فرمتهای گوناگون export کرد:
• Rich Text Document (RTF)
• Portable Document (PDF)
• Microsoft Word (DOC)
• Microsoft Excel (XLS)
• Crystal Report (RPT)
• HTML 3.2 (HTML)
• HTML 4.0 (HTML)
فایل اختیاری Uranus
در حالیکه سیاره اورانوس، یک سیاره تاریک و پر از گاز است، در این مقاله من Uranus را به عنوان یک فایل XML موقت آورده ام که می توانید در صورت تمایل از آن جهت ذخیره داده های پارامتر استفاده کرد.
Pathwayهای پروژه
این کلاس، یک کلاس ساده است که ارسال valueهای پارامترهای جدا را به Crystal Reports آسانتر می کند. این کلاس به شما اجازه می دهد optionهای پارامتر را سفارشی کنید، بدون اینکه مجبور به بازنویسی همه کدها جهت ارسال پارامترها به Crystal Reports باشید.
Drop Down اتوماتیک تقویم
اگر می خواهید تقویم را هنگامی که روی calendar field در datagrid کلیک می شود، drop down کنید، می توانید پیام ویندوز WM_KEYDOWN = 0x100 را جهت update کردن این دکمه با استفاده از کد زیر ارسال کنید:
Win32.SendMessage(dtp.Handle, 0x100, 0x73, 0x3E0001)
تنظیم پهنای ComboBox DropDown
ما به طور اتوماتیک پهنای combobox ایجاد شده در datagrid cell را با پهنای طولانی ترین عنصر، با استفاده از رویداد combobox’s DropDown به شرح زیر تنظیم می کند:
private void AdjustWidthComboBox_DropDown(object sender, System.EventArgs e) {
ComboBox senderComboBox = (ComboBox)sender;
int width = senderComboBox.DropDownWidth;
Graphics g = senderComboBox.CreateGraphics();
Font font = senderComboBox.Font;
int vertScrollBarWidth =
(senderComboBox.Items.Count>senderComboBox.MaxDropDownItems)?
SystemInformation.VerticalScrollBarWidth:0;
int newWidth;
foreach (Object s in senderComboBox.Items) {
string ss = senderComboBox.GetItemText(s);
newWidth = (int)g.MeasureString(ss, font).Width + vertScrollBarWidth;
if (width < newWidth) { width = newWidth; }
}
senderComboBox.DropDownWidth = width;
}
override کردن رویداد CrystalViewer’s Refresh
اگر رویداد CrystalViewer’s Refresh را override نکنیم، هر بار که صفحه را refresh می کنیم، یک صفحه popup برای دریافت پارامترهای Crystal Viewer ظاهر می شود. ما فقط کار زیر را انجام می دهیم.
private void CrystalReportViewer1_ReportRefresh(object source,
CrystalDecisions.Windows.Forms.ViewerEventArgs e) { e.Handled = true; }
در هیچ زمینه ای، روش های مختلف کامل نیستند و هر کدام مزایا و معایبی دارند. این روشها هم از این قاعده مستثنی نبودند، ولی بالاخره روشی که شرکت فرانسوی Business Objects ارائه داد، توسط مایکروسافت به عنوان یک روش استاندارد در پلتفرم NET. پذیرفته شد، و یک نسخه ی رایگان (و البته با امکانات محدود) از نرم افزار آن که Crystal Reports نام دارد،هم در Visual Studio .Net گنجانده شد. این مطلب را می توانید در فرم اسپلش Visual Studio و در زیر منوی About از Visual Studio مشاهده کنید.
نکاتی که قبل از شروع مقاله باید به آنها دقت کنید :
بحث کامل در مورد Reports Crystal حداقل به ۴-۳ کتاب می انجامد. این فناوری حتی یک زبان برای خود دارد، و به دلیل کاربرد گسترده، از دو Syntax مختلف تشکیل شده است، تا طیف وسیع برنامه نویسان، با کمترین زمانی که صرف می کنند، بتوانند از Crystal Reports استفاده کنند. البته در این مقاله فقط در مورد نحوه ی استفاده از آن بحث می شود، که البته بحث کامل خود آن نیز به چند مقاله نیاز دارد.
نکته: این مقاله به صورتی نوشته شده است که در صورت نخواندن قسمت های آتی مقاله، بتوانید بدون اشکال از Crystal Reports در نرم افزار هایتان بهره ببرید.
برای بهره برداری کامل از این مقاله، نیاز به مهارت های زیر دارید:
• داشتن علم مقدماتی SQL Server
• آشنایی به یکی از زبان های .NET (البته برنامه های این مقاله به زبان VB.NET نوشته شده است، ولی با توجه به اینکه فهم توابع به کار برده شده، برای درک کامل کد و ترجمه آن به هر زبان دیگری از جمله #C و #J کافی می باشد، برای درک کامل این مقاله، آشنایی به هرکدام از زبان های NET. برای شما کافی است.)
نکته: با توجه به حجم مقاله ناگزیرم برنامه را به صورت مر حله به مرحله ( Step By Step ) آموزش دهم.
بخش طراحی و استفاده از Wizard :
قست ابتدای این برنامه که همان افزودن Database به پروژه هست، در دو حالت بررسی می شود. (توصیه می کنم بعد از اتمام مقاله برای هر حالت یک پروژه نمونه انجام دهید.)
حالت اول – Database شما قبلا ساخته شده است و شما فقط آنرا به پروژه اضافه می کنید:
با استفاده از گزینه ی Add Existing Item از منوی Project فایل SQL Databaseخود را به پروژه اضافه کنید. در این هنگام به صورت خودکار صفحه ی Data Source Configuration Wizard باز می شود. نود Tables را باز کرده ، جدولی را که می خواهید گزارش سازی کنید، انتخاب کرده و بر روی Finish کلیک کنید.
در این هنگام فایل Database و دیتاست مربوط به آن که شامل جدول مورد نظر است، به پروژه افزوده می شود. (در برخی از موارد به دلیل باگ نا مشخصی در Visual Studio، باید Visual Studio را بسته و دوباره باز کنید. توصیه می کنم ابتدا مرحله بعد را اجرا کنید و در صورت برخورد به مشکل، این کار را انجام دهید.)
حالت دوم – Database را در ابتدای پروژه ایجاد می کنید:
یک Database جدید ایجاد می کنید، در این هنگام صفحه ی Data Source Configuration Wizardکه قبلا آن را مشاهده کرده اید، باز می شود.این بار فقط گرینه ی Tables را انتخاب کرده و بر روی دکمه Finish کلیک می کنید. جداولتان را در Database ایجاد کرده، بر روی فایل dbsCrystalDataSet کلیک کرده و سپس جدول مورد نظر را از داخل Server Explorer به صفحه ی نمایش داده شده از dbsCrystalDataSet، Drag and Drop می کنید.
قسمت مشترک – از این قسمت برنامه در هر دو حالت مشترک است.
کنترل CrystalReportViewer را از ToolBox به داخل فرم درگ کنید. تا اینجا فرمی مشابه فرم زیر خواهید داشت.
در صورتی که پنل Tasks مربوط به CrystalReportViewer1 را مشاهده نمی کنید، بر روی فلش کوچکی که در سمت راست و بالای CrystalReportViewer1 قرار دارد، کلیک کنید. گزینه ی Create a New Crystal Report را از پنل Tasks انتخاب کرده و نامی را که برای فایل گزارش پیشنهاد می شود، تایید کنید. در این هنگام فایلی به نام CrystalReport1.rpt ایجاد شده و صفحه ی Crystal Reports Gallery باز می شود. در این صفحه شما می توانید قالب کلی گزارش را انتخاب کنید. برای برنامه ی ما گزینه های پیش فرض جوابگو هستند، پس تنها بر روی OK کلیک کنید. در صفحه بعد باید Data Source مورد نیاز را انتخاب کنید.
در لیست Available Data Source ، مسیر Project Data –> ADO.NET DataSets را باز کرده و در دیتاستی که ایجاد کردید، جدول مورد نظر را انتخاب کرده و بر روی دکمه < کلیک کنید، تا جدول به لیست Selected Tables افزوده شود. دکمه Next را انتخاب کنید، تا صفحه ی انتخاب فیلد نمایان شود. نود جدولتان را که داخل لیست Available Fields قرار دارد، باز کنید. کلید کنترل را نگه دارید و فیلد هایی را که می خواهید در گزارشان موجود باشند، انتخاب کنید. بر روی دکمه < کلیک کنید تا فیلد ها به لیست Fields To Display اضافه شوند.
نکته: قسمت اصلی ویزارد در همین مرحله به اتمام می رسد، ولی در مرحله ی بعد، گروه بندی فیلد ها توضیح داده می شوند. در صورتی که به گروه بندی نیازی ندارید، برای خروج از ویزارد می توانید در همین صفحه بر روی دکمه Finish کلیک کنید.
بر روی دکمه Next کلیک کنید، تا صفحه Grouping ظاهر شود. یکی از فیلد های Report Fieldsرا که در لیست Available Fields قرار دارد انتخاب کرده، و بر روی دکمه < کلیک کنید، تا فیلد به لیست Group By افزوده شود.
نکته: در اینجا ذکر چند نکته ضروری است: اولا: شما می توانید چند فیلد را از نود Report Fields انتخاب کنید. در این صورت گروه بندی به صورت سلسه مراتبی انجام می شود، به این معنا که در صورتی گروه بندی با فیلد (I)ام صورت می گیرد، که بیش از یک رکورد از اطلاعات در یک گروه که با فیلد (I – 1)ام دسته بندی شده است، وجود داشته باشد. ثانیا: شما می توانید یک فیلد از جدولتان را که در نود Report Fieldsموجود نیست، برای گروه بندی انتخاب کنید. در این صورت با وجود اینکه فیلد انتخاب شده، در جدولتان موجود نیست، ولی رکورد ها بر حسب آن فیلد دسته بندی می شوند.
کار ما با ویزارد در همین نقطه به پایان می رسد، پس بر روی دکمه Finish کلیک کنید. (در صفحات بعد می توانید اطلاعات دیگری از جمله ُSummarized Fields و Filter Fields را ست کنید و ظاهر کلی گزارش را تغییر دهید.)
در این لحظه فایل گزارش به پروژه افزوده شده و فایل در Visual Studio نمایش داده می شود.
بخش کد نویسی :
رویداد Load از فرمتان را باز کنید تا چند خطی هم کد بنویسیم:
۱: ابتدا باید مسیر فایل گزارش را در یک متغیر نگهداری کنید: (فرض کنید فایل در شاخه ی D:\Project\CrystalReport قرار دارد.)
Dim strReportPath As String = “D:\Project\CrystalReport\CrystalReport1.rpt”
نکته: این کد با اینکه درست است، ولی قابلیت حمل را زیر سوال می برد، چون با تغییر محل شاخه ی پروژه باید این مسیر را عوض کنید.
برای قابلیت حمل می توانید از کدی مشابه کد زیر استفاده کنید:
Dim strReportPath As String = GetCurrentDirectory.Substring(0, _
GetCurrentDirectory.Length – 10) & “\CrystalReport1.rpt”
که در این صورت باید خط زیر را به ابتدای صفحه کد اضافه کنید:
Imports System.IO.Directory
در این صورت اگر بارها مسیر شاخه ی پروژه تغییر کند، در اجرای برنامه اختلالی پیش نمی آید. من تا همین حد از قابلیت حمل را برای شما پیشنهاد می کنم، ولی هنوز هم زمانی که پروژه را Release می کنید، باید کد را به صورت زیر تغییر دهید:
Dim strReportPath As String = GetCurrentDirectory() & “\CrystalReport1.rpt”
نکته: برای کسانی که می خواهند یک برنامه داشته باشند، عاری از کدی که اشکال مهندسی نرم افزار به آن گرفته شود، کد زیر توصیه می شود:
Dim strReportPath As String = GetCurrentDirectory()
If strReportPath.Substring(strReportPath.Length – 9) = “bin\Debug” Then
strReportPath = strReportPath.Substring(0, strReportPath.Length – 10)
End If
strReportPath &= “\CrystalReport1.rpt”
۲: در این قسمت باید یک CrystalDocument بسازید و مسیر فایل را در آن Load کنید:
Dim rptEmployee As New CrystalDecisions.CrystalReports.Engine.ReportDocument
rptEmployee.Load(strReportPath)
۳: در این زمان یک دیتاست بسازید و اطلاعات جدولتان را در آن قرار دهید (من اینکار را با استفاده از یک تابع انجام دادم، شما می توانید از هر روش دیگری استفاده کنید)، سپس آن را به متد SetDataSource از سند گزارشتان ارسال کنید:
Dim dstData As DataSet = fncGetData()
rptEmployee.SetDataSource(dstData)
۴: در انتها خاصیت ReportSource از کنترل CrystalReportViewer1 را به سند گزارشتان ست کنید:
CrystalReportViewer1.ReportSource = rptEmployee
تا اینجا کد رویداد Load از فرم تمام شد، ولی برای این که همه افراد بتوانند برنامه را بدون اشکال اجرا کنند، کد تابع fncGetData هم ارائه می شود: (در این برنامه نام فایل Database، dbsCrystal و نام فایل دیتاست dbsCrystalDataSet در نظر گرفته شده است.)
Private Function fncGetData() As DataSet
Dim strConn As String = “Data Source=.\SQLEXPRESS;AttachDbFilename=” & _
GetCurrentDirectory.Substring(0, GetCurrentDirectory.Length – 10) & _
“\dbsCrystal.mdf;Integrated Security=True;User Instance=True”
Dim sqlConnection1 As New SqlConnection(strConn)
Dim strQuery As String = “Select * From tblEmployee”
Dim sqlDataAdapter1 As New SqlDataAdapter(strQuery, sqlConnection1)
Dim dstData As New dbsCrystalDataSet
sqlDataAdapter1.Fill(dstData, “tblEmployee”)
Return dstData
End Function
نکته: توجه شود که در این تابع یک dbsCrystalDataSet (نام فایل دیتاستی که ایجاد کردید) ایجاد شده، نه یک DataSet. همچنین در رشته ی strConn در تابع بالا مسئله ی قابلیت حمل به طور ناقص مطرح می شود، که برای رفع این مسئله می توانید از روشی که در رشته ی strReportPath در رویداد Load فرم مطرح کردم، استفاده کنید.
برای استفاده از تابع بالا لازم است خط زیر را به بالای صفحه ی کد اضافه کنید:
Imports System.Data.SqlClient
]حالا صفحه ی کد شما باید دارای کدی به صورت زیر باشد:
نکته: توجه شود که راه های ساده تری هم برای استفاده از Crystal Reports وجود دارد، که بعضی نیاز به کد نویسی هم ندارند، ولی در این مقاله عمدا این روش آموزش داده شد که بتوانید با کمی تغییر در کد “”Select * From tblEmployee هر گونه فیلتری برای اطلاعات در نظر بگیرید، و عملا نیاز به مراتب کمتری به استفاده از زبان Crystal Report برای به دست آوردن اطلاعات با یک فیلتر خاص، داشته باشید.
حالا برنامه کامل است آن را اجرا کنید. فرم زیبایی! مانند زیر مشاهده خواهید کرد: (البته پر شده از اطلاعات جدول خودتان)
(گزارش داخل فرم)
(فرم متشکل از گزارش)
همانطور که در Toolbar موجود در بالای کنترل CrystalReportViewer1 مشاهده می کنید، این کنترل، خروجی دادن اطلاعات به فرمت های مختلف ( از جمله PDF، DOC و XLS ) ، پرینت اطلاعات ، جستجو در داده ها، صفحه پیمایی اطلاعات و حتی زوم کردن بر روی صفحه ( تا ۴۰۰% و بدون کاهش کیفیت نوشته ها ) را برای شما و کاربر نهایی مهیا می کند.
آموزش گزارش گیری با کریستال رپورت
قسمت اول
برنامه ای که می خواهیم به آن گزارش اضافه کنیم را باز می کنیم.
از مسیر زیر یک dataset اضافه می کنیم .
روی نام برنامه در Solution Explorer راست کلیک می کنیم و از قسمت Add و بعد New Item یک DataSet اضافه می کنیم .
در صفحه باز شده روی آن کلیک راست می کنیم و از قسمت add و سپس DataTable یک Table اضافه می کنیم .
و بعد روی Table ایجاد شده راست کلیک کرده و از قسمت add و سپس Column ستون اضافه می کنیم و در قسمت properties خصوصیات آن مثل نام . نوع و غیره را تعیین می کنیم .
*توجه کنید جدولی که در اینجا ایجاد می کنیم همان جدولی است که بعدا آنرا پر کرده و درون crystal Report نمایش می دهیم . پس هر چند تا ستون که دارید را باید در اینجا اضافه کنید .
ممکن است شما بخواهید اطلاعات خود را از چند جدول بیاورید و داخل گزارش نشان دهید مثلا یک جدول شامل کتاب و یک جدول دیگر شامل نویسنده که شما می خواهید هر کتاب همراه با نام نویسنده آن نمایش داده شود یا شما گزارشی برای یک فاکتور فروش دارید در این صورت احتیاج دارید که برای اقلام درخواستی شماره بزنید پس یک ستون اضافی علاوه بر ستون های اطلاعاتی که دارید احتیاج است در این صورت شما باید هر چند ستون که احتیاج دارید را اضافه کنید و بعد موقع پر کردن آن اطلاعات را از چندین جدول می آوریم یا ستون های اضافی را به صورت دستی پر می کنیم.
روی نام برنامه در solution Explorer راست کلیک می کنیم و بعد قسمت Add و بعد New Item را می زنیم پنجره زیر باز می شود .
از منوی سمت چپ Reporting را انتخاب و از منوی روبروی آن Crystal Report را انتخاب می کنیم که صفحه ای جدید باز می شود .
در این صفحه در قسمتی که با خط قرمز رنگ مشخص شده سه گزینه را می بینید که گزینه اول برای گزارش گیری بصورت نمودار می باشد و دومی برای جدول بندی است و سومی برای گزارش گیری بصورت نامه می باشد .
ما گزینه دوم را انتخاب و Ok می کنیم .
در پنجره بعدی مطابق شکل زیر از مسیر مشخص شده که مربوط به جدولی است که در dataset اضافه کردیم جدول را انتخاب و تو سط فلا شی که با رنگ سبز مشخص شده آنرا اضافه کرده و سپس next را می زنیم . در پنجره باز شده فیلد ها را تک تک انتخاب و توسط فلاشی که با رنگ سبز مشخص شده آنها را به گزارش خود اضافه می کنیم و بعد روی finish کلیک می کنیم . پنجره زیر باز می شود
دراین شکل قسمت های مختلفی را ملاحظه می کنید .
Section1
قسمت بالای گزارش است یعنی جایی که بیشتر تاریخ . شماره . آرم شرکت و . .. گذاشته می شود .
Section2
هر چیزی که در اینجا قرار می گیرد در بالای صفحه نمایش داده می شود .
Section3
قسمت اصلی گزارش میباشد که همان بدنه گزارش است .
Section4
قسمت انتهای گزارش میباشد یعنی جایی که بیشتر برای امضا و مهر و . . . استفاده می شود .
Section5
قسمت انتهایی صفحه میباشد که می توان برای شماره صفحه و . . . استفاده شود .
الان ما باید فیلدهایی را که در جدولی که ایجاد کردیم اضافه کردیم به صفحه گزارش خود اضافه کنیم برای این کار از پنجره field Explorer و در قسمت DataBase Fields و از آنجا با انتخاب table فیلدها را ملاحضه می کنید .
فیلدها را به ترتیبی که میخواهیم نمایش داده شوند از چپ به راست drag کرده ودرون section3 قرار می دهیم .
همانطور که ملاحضه می کنید با این کار یک کپی از فیلدها درون section2 هم ایجاد میشوند که این همان header فیلدها هستند که در گزارش نشان داده میشوند که شما میتوانید صفات ونام اینها را از درون پنجرهproperties تغییر دهید اما آنهایی که در section3 قرار می گیرند نمی توانید نامشان را عوض کنید ولی اندازه و بقیه صفات آنها را می توانید عوض کنید .
برای مثال در شکل زیر id به number تغییر داده شده و رنگ و اندازه آن هم تغییر کرده است .
همانطور که ملاحضه کردید بین سطر ها هیچ خطی وجود ندارد و صفحه ما هیچ شباهتی به جدول ندارد .
برای حل این موضوع از داخل پنجره ToolBox یک ایتم با نام Line Object وجود دارد که می توانیم با آن خط بکشیم .
همانطور که در شکل زیر می بینید با کشیدن خطوط صفحه ما کاملا شبیه جدول شد .
همانطور که در section ها توضیح داده شد در برخی قسمت های گزارش ما احتیاج داریم که شماره یا تاریخ یا . . . در بالای گزارش بزنیم .
برای این کارها ما می توانیم یک text Object در محل مورد نظر قرار دهیم و سپس در قسمت کد به ان مقداری را نسبت دهیم .
برای اضافه کردن Text Object از درون پنجره Toll Box یک Text Object اضافه می کنیم و از درون پنجره properties نام آنرا تغییر می دهیم (توجه کنید نامی که در اینجا قرار می دهید همان نامی است که ما از درون برنامه به این textObject دسترسی داریم پس نام را درست وارد کنید) ما برای مثال نام ListName را انتخاب می کنیم .
همانطور که درون شکلها ملاحضه می کنید برخی قسمت ها با رنگ شطرنجی نمایش داده شده است که این قسمت های شطرنجی درون گزارش نمایش داده نمی شوند برای حل این مشکل section مربوطه را انتخاب کرده و از داخل پنجره Properties قسمت Suppress را به False تغییر میدهیم تا رنگ section مربوطه سفید شود .
همانطور که دیدید در این قسمت ما کل کارهایی که انجام دادیم کارهای آماده سازی برای نشان دادن گزارش بود یعنی هیچ کدنویسی احتیاج نبود در قسمت بعد ما کارهای مربوط به کد نویسی را انجام می دهیم .
قسمت دوم
در این مثال ما فرمی به نام main داریم که در آن باتنی برای گزارش گیری وجود دارد و با فشردن آن فرم گزارش نمایش داده می شود .
ما اطلاعات مربوط به گزارش را که ممکن است ترکیبی از چند جدول باشد را در قالب یک جدول به فرم گزارشمان می فرستیم .
برای اینکه شما بتوانید چند جدول را ترکیب کرده و آنها را در قالب یک جدول به این فرم بفرستید به صورت زیر عمل کنید .
DataTable tb1 = new DataTable();
DataColumn dc0 = new DataColumn(“Id”, typeof(Int32));
DataColumn dc1 = new DataColumn(“Word”, typeof(string));
DataColumn dc2 = new DataColumn(“Type”, typeof(string));
DataColumn dc3 = new DataColumn(“Pronunciation”, typeof(string));
DataColumn dc4 = new DataColumn(“Meaning”, typeof(string));
DataColumn dc5 = new DataColumn(“synonymous”, typeof(string));
DataColumn dc6 = new DataColumn(“Lesson”, typeof(string));
tb1.Columns.Add(dc0);
tb1.Columns.Add(dc1);
tb1.Columns.Add(dc2);
tb1.Columns.Add(dc3);
tb1.Columns.Add(dc4);
tb1.Columns.Add(dc5);
tb1.Columns.Add(dc6);
همانطور که می بینید یک جدول اضافه می کنیم وبعد بر اساس نیاز هر چندتا ستون که احتیاج دارید مانند کد اضافه می کنید و ستون ها را به جدول اضافه می کنیم .
بعد مطابق کد زیر به ازای هر سطر که می خواهید به جدول اضافه کنید عملیات زیر را تکرار می کنید .
یک سطر ایجاد میکنیم و ستون های آنرا به مقادیری که می خواهید نسبت می دهید .
توجه : به جای خط dataGridView1.Rows[i].Cells[0].Value شما باید اطلاعات خود را وارد کنید حال یا بصورت صریح یا بصورت اطلاعاتی از یک جدول دیگر .
و در آخر هم این سطر را به جدول خود اضافه کنید .
DataRow dr = tbl.NewRow();
dr[0] = dataGridView1.Rows[i].Cells[0].Value;//row
dr[1] = dataGridView1.Rows[i].Cells[2].Value;//word
…
tbl.Rows.Add(dr);
بعد این جدول را به فرم گزارش می فرستیم . Name هم اسم گزارش است که می خواهیم در textObject نمایش داده شود .
Print p = new Print(tbl, name);
یک فرم برای نشان دادن گزارش ایجاد می کنیم و یک CrystalReportViewer به آن اضافه می کنیم .
در قسمت کدنویسی این فرم خطوط زیر را اضافه می کنیم .
همانطور که در شکل می بینید در قسمت ۱ یک DataTable با نام dt اضافه شده که این همان جدولی است که ما برای گزارش می فرستیم و در زیر آن یک string با نام Name که نام گزارش است .
DataTable dt;
string name;
در قسمت ۲ شما constructor مربوط به فرم را می بینید که بصورت Public هست که از درون فرم اصلی فابل دسترس باشى که ما اطلاعات را به أن بفرستیم و درون سازنده فرم أنها را به dt وName نسبت دهیم .
public Print(DataTable d, string n)
{
InitializeComponent();
name = n;
dt = d;
}
در قسمت ۳ ما درون Load فرم کدهای زیر را برای نمایش گزارش می نویسیم . (برای ایجاد Load فرم روی فرم Double Click کنید)
——————————————————-
CrystalReport1 c = new CrystalReport1();
این خط یک شئ از crystal Report ما ایجاد می کند .
——————————————————-
c.SetDataSource(dt);
این خط جدولی را که از فرم اصلی برای این فرم فرستاده شده را به عنوان داده اصلی گزارش set می کند .
——————————————————-
((CrystalDecisions.CrystalReports.Engine.TextObject)c.ReportDefinition.ReportObjects[“listName”]).Text = name;
این خط برای این است که اسم گزارش ما که در متغیر name هست را بهText Objectی که درون گزارش با نام listName اضافه کردیم نسبت دهد .
——————————————————-
crystalReportViewer1.ReportSource = c;
این خط crystalReport را به عنوان sourcr ، CrystalReportViewer قرار می دهد .
بعد از انجام مراحل بالا فرم گزارشی که شما می بینید شبیه فرم زیر است که همانطور که می بینید آن قسمتی که در بالای صفحه نوشته شده Pre همان textObject است که ما اسم گزارش که Pre هست را به آن نسبت دادیم و می بینید که خطوطی که ما کشیدیم اطلاعات ما را کاملا شبیه جدول نشان می دهد .
قسمت سوم
در این قسمت اجزای پیچیده تر گزارش گیری را بررسی می کنیم .
اضافه کردن Summary به گزارش
شاید در برخی گزارشها به این احتیاج داشته باشید که جمع یک ستون ( برای مثال ستون قیمت) ویا چیزهایی شبیه این مثل Avg و … را به گزارش خود اضافه کنید برای این کار بصورت زیر عمل کنید .
مانند شکل زیر روی صفحه گزارش راست کلیک کرده و insert و سپس summary را کلیک کنید .
پنجره زیر باز می شود .
از قسمتی که با رنگ قرمز مشخص شده آن ستونی که می خواهید برای آن summary قرار دهید را انتخاب و از قسمت سبز رنگ نوع summary را انتخاب کنید و ok را بزنید .
یک آیتم اضافه می شود که می توانید آنرا در هر کجا که دوست دارید قرار دهید .
اضافه کردن یک فیلد خاص مثل تاریخ ، ساعت و . . .
برای این منظور مطابق شکل روی صفحه گزارش راست کلیک کرده و سپس Insert و بعد Special Field و از آنجا آن فیلدی را که می خواهید را کلیک کنید . یک آیتم اضافه می شود که می توانید آنرا در هر کجا که دوست دارید قرار دهید .
فرمول نویسی
بخشی در crystal Report وجود دارد که می توان درون آن با توجه به توابعی که دارد فرمول نویسی کرد برای مثال یک فرمول بنویسید که سطرها را یکی در میان با رنگ های مختلف نشان دهد و . . .
مطابق شکل روی صفحه گزارش گیری راست کلیک کرده و Report و سپس Formula Workshop… را کلیک می کنیم .
پنجره زیر باز می شود .
همانطور که ملاحضه می کنید در منوی سمت چپ سه قسمت اصلی وجود دارد .
Formula Fields
در این قسمت فیلدهای خاصی را که می خواهیم برای آنها فرمول می نویسیم مثل یک فیلد که بصورت اتوماتیک از رکورد اول تا آخر را بصورت ۱،۲،۳،… شماره گذاری کند .
Section Formulas
فرمول نویسی برای گروه ها و رکوردها
Formating Formulas
فرمول نویسی برای هر section بر اساس فرمت هایی که وجود دارد برای مثال یکی از این فرمت ها تغییر رنگ رکوردها می باشد .
پنجره فرمول نویسی مانند شکل زیر است .
همانطور که ملاحضه می کنید سه بخش اصلی وجود دارد .
قسمت فیلدها
فیلدهای ما در ان قرار دارند که با Double Click کردن بر روی هر کدام در پنجره سفید پایین که محل کدنویسی است اضافه میشوند.
قسمت توابع
شامل توابع آماده است توابعی مثل Sin ، Sum و . . .
قسمت عملیات
شامل عملیات است مثل if و . . .
• اضافه کردن یک فیلد که بصورت اتوماتیک از رکورد اول تا آخر را بصورت ۱،۲،۳،… شماره گذاری کند .
روی قسمت Formula Fields راست کلیک می کنیم و New را می زنیم در پنجره باز شده اسم فیلد را می نویسیم و سپس UseEditor را می زنیم پنجره فرمول نویسی باز می شود .
از قسمت توابع و از زیر بخش print State روی RecordNumber ، Double Click می کنیم تا مطابق شکل اضافه شود .
پس از انجام این مراحل روی دکمه save and close بالای صفحه کلیک می کنیم که اگر خطایی وجود نداشته باشد پنجره بسته
می شود.
درون پنجره Field Explorer و در قسمت Formula Fields یک فیلد با نامی که انتخاب کردید اضافه شده است .
برای اضافه کردن آن به گزارش آنرا drag کرده و هر کجا که می خواهیم قرار می دهیم .
توجه داشته باشید که این فیلد باید به عنوان یک ستون در section3 قرار گیرد .
• عوض کردن رنگ رکورد ها به صورت یکی در میان
روی صفحه گزارش گیری راست کلیک کرده و Report و سپس Formula Workshop… را کلیک می کنیم .
در پنجره باز شده مطابق شکل روی علامت + کنار Formatting Formulas کلیک کرده و سپس روی زیر بخش Details راست کلیک کرده و New Formatting Formulas… را می زنیم .
پنجره زیر باز می شود .
قسمت Background Color را انتخاب می کنیم و use Editor را می زنیم .
در قسمت کدنویسی خط زیر را می نویسیم و برنامه را save وسپس close می کنیم .
if RecordNumber mod 2 = 0 then crWhite else crSilver
اضاقه کردن box برای استفاده های خاص مثل امضا و . . .
روی صفحه گزارش راست کلیک کرده و Insert سپس Box را کلیک می کنیم مدادی اضافه می شود که می توانیم با آن جعبه بکشیم و سپس خواص جعبه را از درون پنجره Properties عوض کنیم .
اضافه کردن نمودار
روی صفحه گزارش راست کلیک کرده و Insert سپس Chart را کلیک می کنیم صفحه ای مثل شکل باز می شود که شامل ۳ تب است
تب اول برای انتخاب نوع چارت
تب دوم set کردن داده ها
تب سوم برای نام گذاری خطوط چارت و . . .
گروه بندی کردن
روی صفحه گزارش راست کلیک کرده و Insert سپس Group… را کلیک می کنیم صفحه ای مثل شکل باز می شود .
در قسمت قرمز رنگ فیلدی را که می خواهیم گروه بندی بر اساس آن انجام شود را انتخاب و از قسمت سبز رنگ نوع مرتب سازی را انتخاب می کنیم .
اضافه کردن عکس
ممکن است شما احتیاج به این داشته باشید که در بالای صفحه یا هر جای دیگر عکسی را به عنوان آرم شرکت و . . . نمایش دهید .
برای این منظور روی صفحه گزارش راست کلیک کرده و Insert سپس Picture را کلیک کنید که پنجره ای باز می شود که شما باید عکسی را از درون کامپیوتر خود انتخاب کنید .
سپس این picture Object اضافه شده را در هر جا که دوست دارید فرار دهید.
برای مثال عکسی را که اضافه کردیم بالای گزارش خود قرار دادیم و صفحه گزارش پس از اجرا بصورت شکل زیر شد .
ممکن است در یک برنامه شما احتیاج داشته باشید که عکسی را در زمان اجرا درون گزارش خود نشان دهید برای این منظور شما باید یک فیلد از نوع byte[] درون جدولی که در dataset درست کردید و درون جدول خود که برای گزارش می فرستید داشته باشید .
اگر برای هر سطر از اطلاعات نیاز به یک عکس جدا دارید (برای مثال ممکن است شما بخواهید اطلاعات افراد را نمایش دهید و هر فرد عکسی دارد) برای این کار برای هر سطر جدولی که به گزارش می فرستید یک عکس قرار داده و نمایش می دهید .
اما اگر فقط یک عکس احتیاج دارید ( مثلا بر اساس انتخاب کاربر یک عکس قرار است درون گزارش نمایش داده شود ) برای این کار همان فیلد عکس را به عنوان نمایش عکس درون گزارش قرار می دهید اما عکس مورد نظر را فقط در سطر آخر جدول ارسالی به گزارش قرار می دهید و این فیلد برای بقیه سطرها خالی می باشد . قرار دادن یک زیر گزارش در گزارش اصلی
برای این منظور روی صفحه گزارش راست کلیک کرده و Insert سپس subreport را کلیک کنید .پنجره زیر باز می شود .
همانطور که در شکل می بینید دو انتخاب وجود دارد یکی استفاده از یک گزارش موجود و دیگری ایجاد یک گزارش جدید .
برای ایجاد یک گزارش جدید یک نام وارد می کنیم سپس روی باتن Report Wizaed کلیک می کنیم .
پنجره ای باز می شود که همان پنجره ای است که در صفحات قبل درباره آن توضیح داده شد .
اضافه کردن section جدید
ممکن است شما به این احتیاج داشته باشید برای یک منظور خاص یک section اضافه کنید .
برای این منظور روی صفحه گزارش راست کلیک کرده و Insert سپس section را کلیک کنید .پنجره زیر باز می شود .
همانطور که در شکل می بینید با انتخاب هر قسمت و کلیک کردن بر روی دکمه Insert یک section جدید ایجاد می شود .
کریستال با استفاده از C#.NET
2003 Windows Application
مرحله ۱: جهت باز کردن سند crystal report، روی پروژه راست کلیک کنید.
Add و سپس Add New item را انتخاب کنید. پنجره جدیدی مانند زیر ظاهر می شود. به گزارشتان اسم بدهید.
مرحله ۲:
بعد از کلیک روی Open، پنجره دیگری خواهید دید که به شما امکان می دهد چگونگی ایجاد گزارش را با استفاده از Report Expert یا از Blank Reportیا از یک گزارش موجود انتخاب کنید. در اینجا، من گزینه دوم یعنی یک Blank Report را انتخاب می کنم.
حالا سند Crystal Report شما باز خواهد شد. در سمت چپ، شما Field Explorer را می بینید که توسط آن می توانید با database در ارتباط باشید.
اگر Field Explorer موجود نباشد، می توانید از Ctrl + Alt + T استفاده کنید
مرحله ۳:
حالا برای انتخاب database، روی Database Fieldsدر Field Explorer راست کلیک کنید.
Add/Remove Database -> OLEDB(ADO) ->Make New Connection -> Microsoft OLE DB Provider for SQL Server را انتخاب کنید. روی Next کلیک کنید و اطلاعات connectionتان را بدهید، روی Next کلیک کنید و سپس روی Finish کلیک کنید.
حالا می توانید جدولها، viewهایی را که برای Report احتیاج دارید، اضافه کنید. پنجره، شبیه این خواهد بود.
مرحله ۴:
حالا در Field Explorerتان می توانید Table/View انتخابی تان را ببینید. Fieldهایی را که می خواهید در گزارش در قسمت جزییات (Details Section) نشان دهید، drag کنید. صفحه زیر ظاهر خواهد شد.
Fieldهای Details section، اشیاء Field هستند، و Fieldهای Page Header و Report Header، اشیاء متن هستند.
مرحله ۵:
حالا، جهت نشان دادن این گزارش، یک فرم بردارید و یک CrystalReportViewer به آن اضافه کنید. (فقط CrystalReportViewer را از Tool Box روی فرم drag کنید)
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
حالا حتی اگر databaseهای متصل به گزارش هم داشته باشیم، اما اگر database را تغییر داده باشیم، آنگاه ایجاد مجدد یک Crystal reports ممکن نخواهد بود، پس می توانیم از TableLogOnInfo جهت متصل کردن گزارش به database استفاده کرد.
ایجاد شیء
private TableLogOnInfo LogInfo = new TableLogOnInfo();
می توان این تابع را به صورت زیر نوشت
privatevoid SetLogonInfo()
{
try
{
.ConnectionInfo.ServerName=�SerVerName�;
.ConnectionInfo.UserID=�sa�;
.ConnectionInfo.Password=�ok�
.ConnectionInfo.DatabaseName=�CrystalSample�;
}
atch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
حالا باید شی گزارش را ایجاد کنیم. راههای متنوعی جهت نمایش دادن گزارش وجود دارد.
یک شی از Report Document ایجاد کنید که بتوان در هر گزارشی که قرار است روی آن CrystalreportViewer نشان داده شود، قابل استفاده باشد:
ReportDocumentO_Report=new ReportDocument();
rt.Load(@”E:\CrytstalSample\rptShowList.rpt”);
اشیاء متفاوتی برای گزارشهای متفاوت به شرح زیر ایجاد کنید:
rptShowList O_showList =new rptShowList();
ort1.Database.Tables[0].ApplyLogOnInfo(LogInfo);
مرحله ۶:
حالا می خواهم AddressList کاربرانی را که عددشان بزرگتر از ۱۵ است نشان دهم. بدین منظور، من DataTable را با این رکوردها پر می کنم و سپس آن را به گزارش الصاق (attach) می کنم.
DataTable DT =new DataTable();
try
{
string CmdStr=””;
CmdStr = �Select * fromVw_AddressList whereUser_Number>15�;
Connection.Open();
SqlDataAdapterAdpt=newSqlDataAdapter(CmdStr,Connection);
DT.Clear();
Adpt.Fill(DT);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
Connection.Close();
}
مرحله ۷:
حالا DataTable پرشده بالا را به عنوان ReportsdataSource تنظیم کنید.
O_showlist.Database.Tables[0].SetDataSource(DT);
مرحله ۸:
گزارش را به عنوان crystal report viewer report sourceتنظیم کنید تل گزارش را به viewer، bind کنید..
CryStalReportViewer1.ReportSource = O_Report1111;
CryStalReportViewer1.Zoom(1);
همان کار را می توان با شی متنی هم کرد.
همچنین می توان properties of Formula Field را به روشهای دیگر هم تغییر داد.
O_showlist.DataDefinition.FormulaFields[“Header”].Text = �AddressList�;
Fieldهای :Formula
در اینجا من فقط نمونه ای از چگونگی استفاده از formula field را توضیح خواهم داد. شرح کامل formula fieldاز حوصله این بحث خارج است.
روی Formula Field و سپس New راست کلیک کنید و آن را نامگذلری کنید.
صفحه ویرایش Formula مانند زیر ظاهر خواهد شد:
بخش سمت چپ شامل fieldهای databaseیی می شود که می توانیم روی آن fieldیی را که می خواهیم formula را در آن بنویسیم، انتخاب کنیم. بخش میانی تابع ها هستند. می توانیم انواع تابع ها را به Formula اعمال کنیم. سمت راست مخصوص عمل کننده ها (operator) است، یعنی جاییکه می توانیم از عمل کننده ها در formula استفاده کنیم.
می توان کد را به صورت زیر نوشت:
if({Vw_AddressList.Gender})= ‘M’ then
‘Male’
else
‘Female’
ایجاد یک گزارش ساده
برای اینکه یک برنامه ی مجهزبه امکان گرفتن گزارش قابل چاپ در دات نت داشته باشیم می توانیم از یکی از بهترین ابزارهای گزارش گیری در این محیط یعنی crystal report استفاده کنیم.
برای این کارباید در هنگام نصب ویژال استودیو گزینه ی مربوط به نصب این برنامه نیز فعال باشد سپس در یک پروژه ی vb.net گزینه ی add new item… را انتخاب کرده و crystal report را انتخاب می کنیم و برای آن آیتم بانک اطلاعاتی مورد نظرخود و فیلدها و جداول وسایر تنظیمات ان را انتخاب می کنیم.
اگر جدول دیتا بیس ما مجهر به رمز عبور باشد در هنگام تعریف اطلاعات اتصال نی توانیم گزینه ی integrated security را انتخاب کنیم با این کار در هنگام اجرای برنامه و ورود به صفحه ی گزارش مجددا از کاربر رمز عبور دیتا بیس خواسته نمی شود.
ضمن اینکه در رویداد لود یک صفحه هم باید اطلاعات کانکشن را برای استفاده ی حرفه ای تر از امکانات تعریف نماییم:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Dim strconnection As String = “رشته اتصال”
dim oconnetion as new sqlclient.sqlconnection(strconnetion)
dim strsql as string =”select * from table where” …
Dim oda As New SqlClient.SqlDataAdapter(strsql, aconnetion)
Dim adataset As New DataSet
oda.Fill(odataset, “table”)
Dim rpt As New crystalreport1
rpt.load(“crystalreport1”)
rpt.setdatasource(odataset.tables(“table”))
crystalreportviewer1.reportsource = rpt
crystalreportviewer1.refresh()
نکته : از پنجره Tools نیز یک Crystal Report Viewer به فرم مورد نظر اضافه می کنیم این ریپورت ویور،گزارش موجود در crystal report 1 را نمایش می دهد.
منابع:
http://www.wikipedia.com
http://www.p30world.com
http://www.codeproject.com
نظرات بسته شده است، اما بازتاب و پینگ باز است.