در قسمتی از پروژه تجاری، برای طراحی ریپورت توسط کاربر نیاز به موضوع مطرح شده این پست داشتم و به نتایج مطلوبی در این زمینه توسط کامپوننت Stimulsoft Report.Net دست یافتم.
پروژه بنده به صورتی هست که در آن قرار است یک سری اطلاعات توسط DataTable به Report ارسال و ریپورت هم Fieldها را که از قبل طراحی شده، روی فرم داشته باشد و
کاربر فقط این امکان را داشته باشد که مکان فیلدها ( یعنی مختصات ) روی صفحه A4 را با توجه به سلیقه خودش تنظیم و ذخیره نماید.
اهداف :
1.غیر فعال کردن بعضی از امکانات صفحه Design
2.اعمال یکسری تنظیمات از طریق کدنویسی (Code Behind) بر روی ریپورت
مانند : اینکه ShowGrid فعال باشه یا نه -- یا Toolbox.visible=false باشه
3.فارسی سازی محیط طراحی برای کاربر
4.ذخیره و ...
اسکرین شات : ( حالت پیشفرض بدون اعمال تغییرات Runtime )
رفرنسهای مورد نیاز:
using Stimulsoft.Base.Services;
using Stimulsoft.Report;
using Stimulsoft.Report.Components;
using Stimulsoft.Report.Design;
using Stimulsoft.Report.Design.Toolbars;
using Stimulsoft.Report.Render;
using Stimulsoft.Report.Units;
//ایجاد یک شی از ریپورت
StiReport report = new StiReport();
//ریست کردن تنظیمات به حالت پیشفرض
report.Reset();
//ریست کردن تنظیمات سرویسهای StiConfig.Reset();
//ریست کردن تنظیمات چاپ
StiSettings.Clear();
//تنظیم عنوان ریپورت به صورت دلخواه
StiOptions.Designer.DesignerTitle = title + " طراحی فرم ";
StiOptions.Designer.DesignerTitleText = title + " طراحی فرم ";
//غیرفعال شدن نمایش تب کدنویسی
StiOptions.Designer.CodeTabVisible = false;
//فعال کردن امکان RightToLeft
StiOptions.Designer.UseRightToLeftGlobalizationEditor = true;
//غیرفعال شدن قابلیت تغییر نام ریپورت توسط کاربر
StiOptions.Designer.CanDesignerChangeReportFileName = false;
//غیر فعال کردن تشخیص اتوماتیک زبان پیش فرض UI طراحی
StiOptions.Designer.UseSimpleGlobalizationEditor = false;
//تنظیم تم ریپورت از حالت استاندارد به ریبون
StiOptions.Windows.GlobalGuiStyle = StiGlobalGuiStyle.Office2010Blue;
//فعال سازی تم ریبون
StiOptions.Designer.IsRibbonGuiEnabled = true;
برای دسترسی به بخش Dictionary که به اطلاعات DataSoruceها دسترسی میدهد البته برای قابلیت Design :
یک شی از StiOptions ایجاد کنید. سپس Designer و فعال و غیرفعال کردن نمایش هر بخش را و حتی تغییر آیتمهای موجود در منوی راست کلیک هر شی، قابل تغییر خواهند بود.
پنل Dictionary از سه شاخه اصلی تشکیل میشود : که با دستورات زیر میتوان نمایش این بخشها را در صورت خالی بودن از داده غیر فعال نمود
BusinessObjectsCategory - DataSourcesCategory -VariablesCategory
StiOptions.Designer.Panels.Dictionary.ShowEmptyBusinessObjectsCategory = false;
StiOptions.Designer.Panels.Dictionary.ShowEmptyDataSourcesCategory = false;
StiOptions.Designer.Panels.Dictionary.ShowEmptyVariablesCategory = false;
در صفحه طراحی، 3 پنل وجود دارد :
1- Dictionary
2- Properties
3- Report Tree
که Properties نسبت به هر شیء ایی که از صفحه ریپورت انتخاب میکنید، تنظیمات مربوط به آن را برای ویرایش در اختیار کاربر قرار میدهد.
پنل Report Tree نیز از دادههای موجود از دیتاسورس بخش Dictionary که به صورت شیء در صفحه ریپورت قرار داده شدهاند نمایش درخت وارهای را در اختیار کاربر قرار میدهد و میتواند از اشیاء این درخت واره در ریپورت به صورت متعدد استفاده نماید.
میتوان هر کدام از این پنلها را ( که به صورت سرویس در Stimulsoft تعریف شده) از دید کاربر مخفی نمود یا به صورت محدود یکسری از قابلیتها را در اختیار کاربر قرار داد:
//غیر فعال کردن سرویسهای پنل
Stimulsoft.Report.Design.Panels.StiPropertiesPanelService propPanel = Stimulsoft.Report.Design.Panels.StiPropertiesPanelService.GetService();
propPanel.ServiceEnabled = false;
Stimulsoft.Report.Design.Panels.StiDictionaryPanelService dictPanel = Stimulsoft.Report.Design.Panels.StiDictionaryPanelService.GetService();
dictPanel.ServiceEnabled = true;
Stimulsoft.Report.Design.Panels.StiReportTreePanelService treePanel = Stimulsoft.Report.Design.Panels.StiReportTreePanelService.GetService();
treePanel.ServiceEnabled = false;
Stimulsoft.Report.Design.Toolbars.StiToolsToolbarService cpanel = Stimulsoft.Report.Design.Toolbars.StiToolsToolbarService.GetService();
cpanel.ServiceEnabled = false;
StiOptions.Dictionary.BusinessObjects.AddBusinessObjectAssemblyToReferencedAssembliesAutomatically = false;
StiOptions.Dictionary.BusinessObjects.AllowProcessNullItemsInEnumerables = false;
StiOptions.Dictionary.BusinessObjects.AllowUseDataColumn = false;
StiOptions.Dictionary.BusinessObjects.AllowUseFields = false;
StiOptions.Dictionary.BusinessObjects.AllowUseProperties = false;
StiOptions.Dictionary.BusinessObjects.CheckTableDuplication = false;
StiOptions.Dictionary.ShowOnlyAliasForDataSource = true;
StiOptions.Dictionary.ShowOnlyAliasForDataColumn = true;
StiOptions.Dictionary.ShowOnlyAliasForTotal = true;
dictPanel.ShowNewButton = false;
dictPanel.ShowActionsButton = false;
dictPanel.ShowBusinessObjectNewMenuItem = false;
dictPanel.ShowCalcColumnNewMenuItem = false;
dictPanel.ShowCategoryNewMenuItem = false;
dictPanel.ShowCollapseAllMenuItem = true;
dictPanel.ShowColumnNewMenuItem = false;
dictPanel.ShowConnectionNewMenuItem = false;
dictPanel.ShowContextMenu = false;
dictPanel.ShowCreateFieldOnDoubleClick = false;
dictPanel.ShowCreateLabel = false;
dictPanel.ShowDataParameterNewMenuItem = false;
dictPanel.ShowDataSourceNewMenuItem = false;
dictPanel.ShowDataSourcesNewMenuItem = false;
dictPanel.ShowDeleteButton = false;
dictPanel.ShowDeleteForBusinessObject = false;
dictPanel.ShowDeleteForDataColumn = false;
dictPanel.ShowDeleteForDataConnection = false;
dictPanel.ShowDeleteForDataParameter = false;
dictPanel.ShowDeleteForDataRelation = false;
dictPanel.ShowDeleteForDataSource = false;
dictPanel.ShowDeleteForVariable = false;
dictPanel.ShowDeleteMenuItem = false;
dictPanel.ShowDictMergeMenuItem = false;
dictPanel.ShowDictNewMenuItem = false;
dictPanel.ShowDictOpenMenuItem = false;
dictPanel.ShowDictSaveMenuItem = false;
dictPanel.ShowDictXmlExportMenuItem = false;
dictPanel.ShowDictXmlImportMenuItem = false;
dictPanel.ShowDictXmlMergeMenuItem = false;
dictPanel.ShowDownButton = false;
dictPanel.ShowEditButton = false;
dictPanel.ShowEditForBusinessObject = false;
dictPanel.ShowEditForDataColumn = false;
dictPanel.ShowEditForDataConnection = false;
dictPanel.ShowEditForDataParameter = false;
dictPanel.ShowEditForDataRelation = false;
dictPanel.ShowEditForDataSource = false;
dictPanel.ShowEditForVariable = false;
dictPanel.ShowEditMenuItem = false;
dictPanel.ShowExpandAllMenuItem = true;
dictPanel.ShowMarkUsedMenuItem = false;
dictPanel.ShowNewButton = false;
dictPanel.ShowPropertiesForBusinessObject = false;
dictPanel.ShowPropertiesForDataColumn = false;
dictPanel.ShowPropertiesForDataConnection = false;
dictPanel.ShowPropertiesForDataParameter = false;
dictPanel.ShowPropertiesForDataRelation = false;
dictPanel.ShowPropertiesForDataSource = false;
dictPanel.ShowPropertiesForVariable = false;
dictPanel.ShowPropertiesMenuItem = false;
dictPanel.ShowRelationNewMenuItem = false;
dictPanel.ShowRelationsImportMenuItem = false;
dictPanel.ShowRemoveUnusedMenuItem = false;
dictPanel.ShowSortItemsButton = false;
dictPanel.ShowSynchronizeMenuItem = false;
dictPanel.ShowUpButton = false;
dictPanel.ShowUseAliases = true;
dictPanel.ShowVariableNewMenuItem = false;
dictPanel.ShowViewDataMenuItem = false;
یکی از قابلیتهای خوب و کاربردی این کامپوننت پشتیبانی کامل حتی منوها از زبان فارسی میباشد که استفاده از این کامپوننت را در نرم افزارهای تجاری در کشور قابل انعطاف پذیرتر میکند. برای فارسی سازی به یک فایل XML که در مسیر نصب کامپوننت قرار دارد، نیاز است.
نام فایل fa.xml میباشد. آنرا در مسیر نرم افزار قرار دهید و سپس کد زیر را اضافه نمایید:
//تنظیم زبان به فارسی
StiConfig.LoadLocalization("fa.xml");