ورود

View Full Version : آموزش: ایجاد جدول به ازای هر رکورد، نمایش هر رکورد در جدول مجزا، استفاده از DataBand در stimulSoft Reports



Mahmoud.Afrad
پنج شنبه 03 تیر 1395, 20:56 عصر
1- در برنامه خود، یک کلاس با چهار پراپرتی(به ازای هر سلول یک پراپرتی) ایجاد می کنیم.(میتوان از دیتاتیبل هم استفاده کرد) نام این کلاس را ClsReportModel می گذاریم. (نوع پراپرتی ها باید متناسب با نوع داده های درون دیتابیس باشد)

مثال: فرض بر این گذاشته شده که داده ها از نوع رشته هستند:
public class ClsReportModel
{
string _row1Column1;
string _row1Column2;
string _row2Column1;
string _row2Column2;

public string Row1Column1
{
get { return _row1Column1; }
set { _row1Column1 = value; }
}

public string Row1Column2
{
get { return _row1Column2; }
set { _row1Column2 = value; }
}

public string Row2Column1
{
get { return _row2Column1; }
set { _row2Column1 = value; }
}

public string Row2Column2
{
get { return _row2Column2; }
set { _row2Column2 = value; }
}
}
2- در گزارش، یک Dictionary از نوع BusinessObject اضافه می کنیم.
141058
نام این دیتاسورس را MyBusinessObject می گذاریم. به تعداد پراپرتی های کلاس باید Column ایجاد کنیم. (بعدا کاری خواهیم کرد که Columnهای این دیتاسورس به صورت سلول به نمایش درآید) نام ستونها همنام پراپرتی های کلاس ClsReportModel (یا همنام ستونهای دیتاتیبل) باید باشد. در انتها Ok می کنیم.
141059
3- در گزارش، از قسمت ابزارها از دسته Bands ، ابزار Data را به گزارش اضافه می کنیم. (اگر پنجره Data Setup باز شد، بدون تغییر می بندیم)
141060
از پنجره Properties نام(Name) این ابزار را MyDataBand میگذاریم. از بخش Data خاصیت Business Object را هم برابر MyBusinessObject قرار می دهیم. از بخش Columns هم میتوان تعداد ستونهایی را مشخص کرد که حالت چند ستونی به MyDataBand میدهد، در اینصورت جداول در یک سطر تکرار می شوند. (نتیجه در انتهای پست مشخص است که گزارش چند ستونی شده است)
141061
4- در گزارش، از قسمت ابزارها از دسته Bands ، ابزار Table را به گزارش اضافه می کنیم.
141062
جدول را با موس به درون ابزار MyDataBand انتقال می دهیم. (جدول زیرمجموعه MyDataBand باید قرار بگیرد)
نام این جدول را MyTable قرار می دهیم. از پنجره Properties تغییرات ذیل را بر روی جدول MyTable اعمال می کنیم:
- از بخش Data خاصیت Master Component جدول را روی ابزار MyDataBand قرار می دهیم.
- از بخش Table ، تعداد سطر و ستون ( Row, Column ) جدول را برابر 2 قرار داده و تیک Dockable Table را بردارید.
- حالا عرض جدول را با استفاده از موس متناسب با نیاز تنظیم کنید.
141063
حال باید هر سلول از جدول را انتخاب کرده و تنظیمات لازم را انجام دهیم.
- سلول را با استفاده از پنجره Properties انتخاب مکنیم
141064
مثلا برای سلول ردیف اول و ستون اول(Table1_Cell1) به صورت ذیل عمل میکنیم:
- خاصیت Side را فقط بر روی راست و پایین قرار می دهیم (با این کار خط های درون باقی مانده و حاشیه دور جدول از بین می رود)
- خاصیت Text را باید به پراپرتی مناسب Bind کنیم. برای این کار دکمه جلوی خاصیت text را فشرده و از پنجره باز شده از Data Column ستون(پراپرتی) مناسب این سلول را انتخاب می کنیم.
141065

141066
گزارش را در محل مناسب ذخیره می کنیم.

5- در برنامه، باید مجموعه ای از اشیاء ایجاد شده از کلاس ClsReportModel را به عنوان سورس و از طریق متد RegBusinessObject به دیکشنری MyBusinessObject ارسال کنیم و سپس گزارش را نمایش دهیم. داده ها میتوانند از دیتابیس و یا هر منبع دیگری آماده شوند. در این صورت به ازای هر رکورد یک شئ از کلاس MyBusinessObject باید ایجاد کرده و به لیست اضافه کنیم.
در کد مثال زیر چهار نمونه ایجاد شده و برای هر کدام یک پراپرتی متفاوت را مقداردهی کرده ایم
List<ClsReportModel> reportModels = new List<ClsReportModel>();
ClsReportModel m1 = new ClsReportModel() { Row1Column1 = "a"};
ClsReportModel m2 = new ClsReportModel() { Row1Column2 = "b" };
ClsReportModel m3 = new ClsReportModel() { Row2Column1 = "c" };
ClsReportModel m4 = new ClsReportModel() { Row2Column2 = "d" };
reportModels.Add(m1);
reportModels.Add(m2);
reportModels.Add(m3);
reportModels.Add(m4);

StiReport report = new StiReport();
report.Load(Application.StartupPath + "/report.mrt");
report.RegBusinessObject("MyBusinessObject" , reportModels);
report.Show();

گزارش به صورت زیر در خواهد آمد:
141067

دلتنگ اسمان
پنج شنبه 03 تیر 1395, 22:23 عصر
بابت این آموزش واقعا ممنون.
دقیقا چیزی که میخواستم.
ببخشید چندتا سوال دارم
1: فاصله این جداول از همدیگه رو چطوری میشه تنظیم کرد؟
2-طول ردیف (به عبارتی طول سلول)را چطوری میشه کم یا زیاد کرد(منظورم با کد نویسی).
3-دیتابایند همیشه در بالای صفحه قرار داره. چطوری میشه در جای دلخواه قرار داد.؟
4-اگه بخواهیم بصورت داینامیک تعداد جداول را کم یا زیاد کنیم چطوری میشه؟
ببخشید تعداد سوالاتم زیاد شد.:لبخندساده::لبخندساده:http://barnamenevis.org/images/smilies/yahoo/106.gifhttp://barnamenevis.org/images/smilies/yahoo/106.gif

Mahmoud.Afrad
جمعه 04 تیر 1395, 02:45 صبح
1- وقتی خاصیت Dockable Table جدول را false کنید (تیکش رو بردارید) میتونید با موس عرض جدولwidth رو کم کنید و جدول رو جابجا کنید. برای ارتفاع هم میتونید height از databand رو تغییر بدید.
2- از طریق متد GetComponentByName میتونید کامپوننت ها رو بدست بیارید و تغییر لازم رو اعمال کنید.

StiComponent tableComponent = report.GetComponentByName("MyTable");
if (tableComponent != null) tableComponent.Width = 2;
3- میتونید یک هدر برای صفحه در نظر بگیرید تا بیاد پایین.
4- یعنی چی تعداد رو تغییر بدید؟ اگر منظورتون تعداد کل جداول هست، خب به تعداد مورد نیاز داده ارسال کنید تا به همون تعداد جدول ایجاد بشه.
اگر هم منظورتون جداولی هست که در یک سطر کنار هم قرار میگیرند باید مثل جواب سوال دوم عمل کنید و از متد GetComponentByName استفاده کنید
StiDataBand dataBandComponent = (StiDataBand) report.GetComponentByName("MyDataBand");
if (dataBandComponent!= null) dataBandComponent.Columns = 3;