# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > ابزارهای گزارش سازی >  ساخت گزارش ساز پویا

## mona_z

سلام 
می خوام گزارش پویا درست کنم به صورتی که کاربر خودش گزارش را طراحی کنه اگر کسی بتواند کمکم کند ممنون می شم.

----------


## مهدی رحیم زاده

اینم یه مثال از گزارش گیری پویا

----------


## gdevnb

سلام
http://www.stimulsoft.com

----------


## رضا عربلو

می توانم بپرسم کجای stimulReport به ما امکان گزارشگیری پویا را می دهد؟
 یعنی آیا کامپاننتی (از نوع ویزاردی اش بهتر است) دارد که شما به برنامه تان اضافه کنید تا کاربرتان بتواند بدون داشتن اطلاعات چندانی از دیتابیس, صرفاً با انتخاب چند فیلد (ترجیحاً از روی یک view) و چند شرط یک گزارش داشته باشد و بتواند این گزارش را customize کند.

----------


## linux

> می توانم بپرسم کجای stimulReport به ما امکان گزارشگیری پویا را می دهد؟
> یعنی آیا کامپاننتی (از نوع ویزاردی اش بهتر است) دارد که شما به برنامه تان اضافه کنید تا کاربرتان بتواند بدون داشتن اطلاعات چندانی از دیتابیس, صرفاً با انتخاب چند فیلد (ترجیحاً از روی یک view) و چند شرط یک گزارش داشته باشد و بتواند این گزارش را customize کند.


شما دقیقا همان فرمی که در زمان طراحی برنامه دارید را در اختیار کاربر می گذارید.

----------


## gdevnb

> می توانم بپرسم کجای stimulReport به ما امکان گزارشگیری پویا را می دهد؟
> یعنی آیا کامپاننتی (از نوع ویزاردی اش بهتر است) دارد که شما به برنامه تان اضافه کنید تا کاربرتان بتواند بدون داشتن اطلاعات چندانی از دیتابیس, صرفاً با انتخاب چند فیلد (ترجیحاً از روی یک view) و چند شرط یک گزارش داشته باشد و بتواند این گزارش را customize کند.


احتیاج به کمپوننت نیست.با یه خط کد گزارش به حالت دیزاینر می ره.کاربر به ساده ترین شکل ممکن می تونه انو Customize کنه.لازم به ذکره که کل محیط دیزاینر *کاملاً* فارسی میشه.(برای این حالت باید کد بنویسد)اگه لازمه کداشو بزارم؟
البته دموی خودش کاملاً گویاست یه بررسی کنید.

----------


## combo_ci

لطف ميكنين يه نمونه بزارين ....اون مدلي كه کل محیط دیزاینر کاملاً فارسی میشه
ممنون

----------


## Mrs.Net

> لطف ميكنين يه نمونه بزارين ....اون مدلي كه کل محیط دیزاینر کاملاً فارسی میشه


منم خیلی احتیاج دارم به فارسی بودنش

----------


## mona_z

من سوالم رو در محیط # c مطرح کردم این فایلی که شما در اختیارمون گذاشتید نمی دونم با چه زبانی است که روی کامپیوتر من بصورت فایل ناشناس است لطفا اگرمیشه برنامه به صورت # C در اختیارمون بگذارید.

----------


## gdevnb

سلام
فارسی شدن محیط دیزاینر:
فایل xml رو در مسیر نصب برنامه پیدا کنید
 
 
StiConfig.LoadLocalization(Application.StartupPath + @"\fa.xml");
stiPreviewControl1.Localize();
 

ورود به دیزاینر:
 
stiReport1.Design();

----------


## gdevnb

> شما دقیقا همان فرمی که در زمان طراحی برنامه دارید را در اختیار کاربر می گذارید.


سلام
البته ممکنه بخواید بعضی اطلاعات توسط کاربر قابل تغییر نباشه مثل کپی رایت یا مثلاً تبلیغات این رو هم در نظر بگیرید که برای جلوگیری از این دسترسی ها ابزارهایی در Stimul وجود داره.

----------


## Mrs.Net

از چه نسخه ای استفاده میکنید؟ (خریدید؟)

----------


## gdevnb

ورژن 2008.04.14  (خیر)

----------


## shocraneh

گویا رفقا یه مثال اینجا ارایه داده بودند که الان نیست .من دنبال یه مثال میگردم که شیوه کار رو متوجه بشوم
چه طوری کاربرمحیط دیزاین رو میبینه و تعداد فیلدها رو خودش انتخاب میکنه ؟یه مثال خیلی ساده برام کافیه.ممنون

----------


## mohamad68

تو لینک زیر می تونین یه sample از گزارش پویا رو دانلود کنید :  :لبخند: 
http://irandevelopers.net/showthread.php?tid=65

----------


## mhdhp86

[/CODE]
ورود به دیزاینر:
 
stiReport1.Design();
[/QUOTE]
 این کد رو باید تو رخداد butten نوشت؟ تو تحت ویندوز هم همینه؟

----------


## javidp

شما می توانید از گزارش ساز پویا همراهان نیک پندار استفاده کنید

امکانات نرم افزار

رابط کاربری
•    رابط کاربری بسیار ساده و جذاب (کاملا بصری)
•    قابلیت ترجمه خودکار (توسط سرویس گوگل) فیلدهای بانک اطلاعاتی جهت سهولت استفاده
•    امکان ساخت گزارش برای افراد غیر متخصص در زمینه بانک اطلاعاتی (بدون نیاز به دانش SQL)
•    رابط کاربری چند زبانه

خروجی ها
•    امکان ذخیره گزارش ها به صورت فایل Xps, PDF, CSV, Text, Image, HTML, XLS, XLSX
•    امکان بازنگری گزارش قبل از چاپ به صورت صفحه به صفحه
•    امکان ارسال خروجی کلیه گزارشها به محیط Excel
•    امکان تغییر کامل نحوه نمایش اطلاعات در گزارش با ابزارهای قدرتمند ویرایشگر(جدول - نمودار - گیج - ماتریسی)
•    امکان ایجاد الگوی عمومی فرم چاپی جهت پرهیز از طراحی فرم چاپی
•    امکان چاپ بارکد
•    امکان ویرایش فرم چاپی قبل از چاپ
•    امکان استفاده از طراح نمودار و استفاده از ده ها نوع نمودار (میله ای ، دایره ای ، 3 بعدی ، ...)

مدیریت کاربران
•    امکان تعریف گروههای کاربری در نرم افزار
•    امکان تعریف کاربران و مدیریت آن ها و تعیین سطح دستری آن ها به گزارشات مختلف
•    کنترل دسترسی کاربران با ارتباط مکانیزه با سامانه Active Directory شرکت
•    امکان یکپارچه شدن با نرم افزار شرکتهای تولید کننده نرم افزار
•    امکان ایجاد گزارش در 3 سطح (سیستم - شرکت – کاربر)

ویژگیهای بارز
•    قابلیت اتصال به پایگاه های اطلاعاتی مختلف از جمله ... SQL, Oracle, Access, Foxpro, Excel, Text File
•    امکان تعیین جداول و فیلدهایی که کاربران امکان ساخت گزارش از آنها را دارند.
•    امکان تهیه گزارش های مرتبط با نرم افزار کاربردی دلخواه به صورت پارامتریک و با استفاده از کلیه فیلدهای اطلاعاتی بدون محدودیت
•    امکان تهیه گزارش از محتویات کلیه فرمهای کاربردی
•    امکان import/export گزارش ها و تهیه نسخه پشتیبان از آنها
•    امکان استفاده از گزارش های صفحه گسترده جهت گزارش های خاص
•    امکان تهیه گزارش های آماری و مدیریتی
•    امکان تعریف سطوح گزارش و برقراری ارتباط بین آنها جهت نمایش جزء به کل و کل به جزء (Drill Down, Drill Up)
•    امکان تعریف زیر پرس و جو و استفاده از آن در سطوح بالاتر
•    امکان تعریف فیلترهای مختلف (با توجه به فیلدهای اطلاعاتی موجود در جداول) برای هر گزارش بصورت مجزا
•    امکان غیر فعال سازی فیلترها در لحظه استفاده از گزارش
•    امکان ایجاد جمع لحظه ای برای گزارشاتی که مقدار هر ردیف براساس مقادیر ردیفهای قبل بدست می آید.
•    امکان برقراری ارتباط بین جداول مختلف حتی در سطح بانک های اطلاعاتی مختلف (Join)
•    امکان تعریف قابلیت مرتب سازی برای ستون خاصی در گزارش
•    امکان فرمول نویسی واستفاده از عملگرهای قدرتمند ریاضی
•    امکان افزودن ستون شماره ردیف
•    امکان گروهبندی و انجام عملیات تجمیعی مانند جمع ، میانگین ، بزرگترین ، کوچکترین
•    امکان انجام عملیات اجتماع چندین زیر پرس و جو با هم (Union)
•    امکان استفاده از ده ها فانکشن تعبیه شده در بانک اطلاعاتی جهت تبدیل داده هایی مانند تاریخ و ساعت و تبدیل عدد به حرف
•    امکان تعریف سربرگ با قابلیت انتخاب نوع و اندازه فونت جهت گزارشات
•    امکان ایجاد گزارش از گزارشهای ایجاد شده قبلی
•    امکان بروز رسانی خودکار گزارش در صورت تغییر داده ها در جداول مرتبط
•    امکان تست هر زیر پرس و جو جهت عیب یابی گزارش

خدمات خاص نرم افزارهای همراهان
•    امکان بهره گیری از صدها عنوان گزارش آماده به تفکیک زیر سیستم های مختلف
•    امکان ذخیره هر یک ازگزارش های آماده با عنوان دلخواه و انجام تغییرات مورد نظر
•    امکان ایجاد میانبر از گزارش به منوی اصلی برنامه و میز کار
•    امکان مرتبط کردن گزارش‌ها با فرم‌های اصلی سیستم‌ها و همچنین فرم‌های ساخته شده در فرم ساز
•    امکان افزودن متغیر های سیستمی به گزارش ساز جهت استفاده در شروط گزارش
•    ارایه کنترلهای نمایشگر گزارشات جهت استفاده در نرم افزارهای ثانویه
•    امکان چاپ گزارش‌های مرتبط شده به فرم‌ها بدون نیاز به اعمال فیلتر

http://hnp.co.ir

----------


## javidp

pdf راهنمای گزارش ساز همراهان رو دیدم ، به نظر میرسه که گزارش ساز خوبیه ، قیمتش هم بد نیست فقط کاش نسخه دمو داشت که تستش کنم...

----------


## vb341

به سایت learnfiles.com  سر بزنید و آموزشهای  StimulSoft  رو ببینید . در این مورد دو مثال جالب داره

----------


## Mohsen229266

> شما دقیقا همان فرمی که در زمان طراحی برنامه دارید را در اختیار کاربر می گذارید.


سلام
اینطوری که dynamic نمی شه دوست عزیز اگه کاربر بخواد چند ستون رو تیک بزنه و بعد نسبت به ستون های انتخابی ریپورت براش ساخته بشه چیکار می کنید؟

مثل خیلی از نرم افزار های حسابداری و... که این کار رو انجام میدن!!!!
اون چیزی که شما فرمودید برای ساختن یک report generator که جدا از برنامه کار میکنه خیلی مفیده بنظر من  کاربر  ستون رو تیک بزنه و بعد نسبت به ستون های انتخابی ریپورت براش ساخته بشه میشه گفت dynamic هست.
برای این کارم لازمه runtime گزارشتون رو بسازید.
با تشکر

----------


## fakhravari

فقط یه دیتاتیبل بدین
  private void PrintTable(DataTable data)        {
            StiReport report = new StiReport();


            //Add data to datastore
            report.RegData("data", data);


            //Fill dictionary
            report.Dictionary.Synchronize();
            report.Dictionary.DataSources[0].Name = "data";
            report.Dictionary.DataSources[0].Alias = "data";


            StiPage page = report.Pages[0];


            //Create HeaderBand
            StiHeaderBand headerBand = new StiHeaderBand();
            headerBand.Height = 0.5;
            headerBand.Name = "HeaderBand";
            page.Components.Add(headerBand);


            //Create Databand
            StiDataBand dataBand = new StiDataBand();
            dataBand.DataSourceName = "data";
            dataBand.Height = 0.5;
            dataBand.Name = "DataBand";
            page.Components.Add(dataBand);


            //Create texts
            double pos = 0;


            double columnWidth = StiAlignValue.AlignToMinGrid(page.Width / data.Columns.Count, 0.1, true);


            int nameIndex = 1;


            foreach (DataColumn dataColumn in data.Columns)
            {


                //Create text on header
                StiText headerText = new StiText(new RectangleD(pos, 0, columnWidth, 0.5));
                headerText.Text.Value = dataColumn.Caption;
                headerText.HorAlignment = StiTextHorAlignment.Center;
                headerText.VertAlignment = StiVertAlignment.Center;


                headerText.Name = "HeaderText" + nameIndex.ToString();
                headerText.Brush = new StiSolidBrush(Color.WhiteSmoke);
                headerText.Border.Side = StiBorderSides.All;
                headerBand.Components.Add(headerText);


                //Create text on Data Band
                StiText dataText = new StiText(new RectangleD(pos, 0, columnWidth, 0.5));
                dataText.Text.Value = "{data." + Stimulsoft.Report.CodeDom.StiCodeDomSerializator.R  eplaceSymbols(dataColumn.ColumnName) + "}";
                dataText.Name = "DataText" + nameIndex.ToString();
                dataText.Border.Side = StiBorderSides.All;
                dataText.HorAlignment = StiTextHorAlignment.Center;




                StiCondition condition = new StiCondition();


                condition.BackColor = Color.White;
                condition.TextColor = Color.Black;
                condition.Expression = "(Line & 1) == 1";
                condition.Item = StiFilterItem.Expression;
                dataText.Conditions.Add(condition);


                dataBand.Components.Add(dataText);


                pos = pos + columnWidth;


                nameIndex++;
            }


            //Create FooterBand
            StiFooterBand footerBand = new StiFooterBand();
            footerBand.Height = 0.5;
            footerBand.Name = "FooterBand";
            page.Components.Add(footerBand);






            //Render without progress bar
            report.Render(false);
            report.Show();
        }

----------


## Mohsen229266

سلام ممنون این درسته ولی با این روش آیا میشه از امکانات استیمول مثل pagenumber , functions , line ,... استفاده کرد؟

----------


## Mohsen229266

اگر شما از امکاناتش با این روش استفاده کردید توضیح بفرمایید ممنون میشم

----------


## fakhravari

حتما میشه :چشمک:

----------


## Mohsen229266

> حتما میشه


لطف میفرمایید یه نمونه برنامه بزارید که فقط PageNumber رو داشته باشه :متفکر: 
 البته با روش بالا که خودتون کدشو کذاشتید

----------


## Mohsen229266

مهندس گزاشتن یه نمونه برنامه براتون مقدور هست؟

----------


## fakhravari

> مهندس گزاشتن یه نمونه برنامه براتون مقدور هست؟


سلام
باشه در اولین فرصت

----------


## Mohsen229266

پیدا کردم :چشمک:

----------


## fakhravari

> پیدا کردم


 :بامزه:  پس هیچ

----------


## ghasem110deh

> پس هیچ


سلام ... هیچی پیدا نکردیم هیچ !
هر چی میگردم بیشتر گیج میشم !
لطف کنین اون نمونه رو واسه ما بزارین :)

----------


## fakhravari

کافی یه تابع
StiPageFooterBand FooterBand1 = new StiPageFooterBand();
مثل 
StiHeaderBand headerBand = new StiHeaderBand();
تعریف کنید و خاصیت Text اونو بزاری
StiText1.Text.Value = "{PageNofM}";

----------


## Mohsen229266

یه نمونه کد واسه اضافه کردن لاین هم بزار لطفا

----------


## fakhravari

> یه نمونه کد واسه اضافه کردن لاین هم بزار لطفا


یک کپی foreach (DataColumn dataColumn in data.Columns) لازم داریم
کپی داخل if (nameIndex == 1)
                { 
بعد این 2 خط تغیر بدین
dataText1.Text.Value = "{Line}";
                    dataText1.Name = "Line" + nameIndex.ToString();

----------

