PDA

View Full Version : آموزش: ساخت یک database ساده با استفاده از کلاس ها ، Linq و ساخت یک Report ساده با Stimulsoft



M.KH-SH
جمعه 19 دی 1393, 09:14 صبح
با سلام
امیدوار هستم که این آموزش مفید باشد.

گاهی اوقات هستش که روی سیستمی هستیم و دسترسی به هیچ یک از فایل های متداول برای ساخت دیتابیس رو نداریم ، از طرف دیگه هم با فایل XML نمیشه به درستی و به سادگی ساختار یک دیتابیس رو با جداول بسیار زیاد ساخت و همیشه به مشکل برمیخورد.
یک روش برای این که بتونیم این کار رو انجام بدیم این هستش که از کلاس های ساخته شده توسط خودمون یک دیتابیس رو بسازیم.
به فرض من یک کلاس دارم که اسم اون رو میزارم DataBase این کلاس حاوی چند Property هستش که نمایانگر جداول موجود در این دیتا بیس ما هستش که اطلاعات رو در اون قرار میدهیم.

Property های مورد نظر ما باید به صورت List<T> باشه چون قراره یک لیست رو بگیره و یا به ما بده از طرفی هم نیاز هستش که به راحتی کم یا زیاد بشه و یا تغییری رو در اون ایجاد کنیم.

public class DataBase
{
public List<PreInvoice> PreInvoiceTable { get; set; }
public List<PreInvoiceDetail> PreInvoiceDetail { get; set; }
}

هر کدام از Property های بالا از یک کلاس دیگه به صورت لیست ساخته شده اند که هر کدام از کلاس ها نیز خود دارای یک سری Property دیگه هستند که مثل SQL همون فیلد های مورد نیاز خودمون به حساب می آیند.

بعد از ساختن این دیتا بیس و جداول آن باید بتونیم فایل رو ذخیره کنیم و از دیتای اون استفاده کنیم برای این کار باید از [Serializable] بر بالای هر کلاس استفاده کنیم با این روش می توانیم کلاس DataBase رو تبدیل به Binary کنیم و سپس از طریق File.WriteBinary ذخیره کنیم.
برای خواندن فایل نیر از File.ReadBinary استفاده میکنیم و سپس آنرا توسط کلاس DeSerializable تبدیل به یک object کرده و آنرا به DataBase تبدیل می کنیم.

-----------------------

توضیحات اولیه بودش که با یک سری از مطالب اولیه آشنا باشید.


یک پروژه بسیار کوچک با این سناریو داریم ::::
یک پیش فاکتور رو ثبت کنیم ، سپس ایتم های موجود در اون رو اضافه یا کم و یا ویرایش کنیم سپس آنرا در لیست صفحه اصلی به نمایش بزاریم و در صورت نیاز آنرا چاپ کنیم.

نکته: در برنامه بعضی از توابع هستند که به صورت آماده در C# نیست ولی ساخته شده که اصطلاحا به Extender معروف هستند.
بنا براین برای اینکه در باز نویسی به مشکل نخورید کد Serialize رو میزارم و بقیه هم که مشخص هستش فقط Convert کردن می باشد و یا می توانید از خود کلاس Alphasoft.Class.Public برای این کار استفاده کنید.


public static byte[] ToBinary(object item)
{
var bf = new BinaryFormatter();
var ms = new MemoryStream();
bf.Serialize(ms, item);
return ms.GetBuffer();
}


public static object ToObject(byte[] item)
{
var ms = new MemoryStream(item);
var bf = new BinaryFormatter();
return bf.Deserialize(ms);
}

-----
برای استفاده از قابلیت ویرایش صفحه گزارش باید در کلاس Print در تابع PrintPreInvoice خط Report.Design() رو فعال کنید.

-----

در صورت داشتن سئوال در این باره در پست های آنده پاسخ خواهم داد.



به علت حجم بالای فایل در سایت نشود Upload کنم.
لینک دانلود ::: alphasoft.ir/download/preinvoice.rar (http://alphasoft.ir/download/preinvoice.rar) سایز فایل : 5.4 mb

M.KH-SH
جمعه 19 دی 1393, 16:18 عصر
به صورت خلاصه نوشتن یک Extender به این صورت می باشد.

public static class Extender
{
public static int ToInt(this string item)
{
return int.Parse(item);
}
}


شما با کلاس بالا یک تابع به تمام string ها اضافه کردید که میتوانید تمامی آنها را تبدیل به int کنید.
نوشتن به همان صورت معمول می باشد ولی با این تفاوت که کلاس و توابع باید به صورت static باشند و قبل از parameter مورد نظر از کلمه this استفاده شود.

نحوه استفاده
var number="12333".ToInt();

M.KH-SH
شنبه 20 دی 1393, 13:43 عصر
با سلام
حتما تا حالا شده که نیاز به گزارش گیری داشته باشین و بخواین سریع یک گزارش رو آماده کنید ولی تا حالا این کار رو انجام ندادین.

به نظر من یکی از بهترین نرم افزار های گزارش گیری نرم افزار stimulsoft هستش که در برنامه بالا استفاده کردم.

به طور کلی این گزارش ساز توانایی ساخت گزارش رو در win , web , silverlight , wpf به ما میده و کار با اون نیز خیلی ساده و راحت هستش.

نحوه کار:

در پروژه کلاسی به نام Print وجود دارد که در این کلاس تمامی کد های مورد نیاز برای یک گزارش سازی رو به ما میده(فقط بخش ارسال اطلاعات و نمایش و همچنین امکانات لازم برای تغییرات جزی در طراحی و کنترل های بکار رفته در خود فایل ریپرت.).

برای اینکه بتونین اطلاعات رو ارسال کنید نیاز به یک یا چند DataTable دارین که ساختار کلی اطلاعات رو در DataTable بسازید و اطلاعات ساختار یافته و با type های مشخص شده و استاندارد رو به گزارش ساز ارسال کنید.

var FirstTable= new DataTable("FirstTable");
FirstTable.Columns.Add("Name");
FirstTable.Columns.Add("Famil");


با دستور بالا ما یک DataTable رو ساختیم که دو ستون دارد حالا باید برای این ستون ها خط اضافه کنیم تا اطلاعات رو وارد اون کنیم.

FirstTable.Rows.Add("محمد","شریعتی");
FirstTable.Rows.Add("رضا","خسروانی");


خوب با این کد هم ما دو خط به جدول ساخته شده اضافه کردیم.

حالا برای ارسال اطلاعات به گزارش باید از کلاس های Stimulsoft استفاده کنیم.

کلاس های مورد استفاده در نمونه برنامه اول در بخش رفرنس موجود هستش با اسم Stimulsoft شروع شده اند. آنها را کپی کرده و یا برنامه Stimulsoft رو دانلود کنید.

از فضای نام : using Stimulsoft.Report; در کلاس مورد نظر استفاده میکنیم.

در تابع مورد نظر که جدول FirstTable رو در اون ایجاد کردیم و خطوط رو به اون اضافه کردیم از StiReport یک نمونه جدید ایجاد میکنیم.

var Report=new StiReport();

در این کلاس تابعی به نام RegData وجود دارد که یکی از ورودی های آن DataTable هست با استفاده از این گزینه جدول FirstTable رو تخصیص میدیم.

Report.RegData(FirstTable);

خوب حالا این کلاس حاوی اطلاعات مورد نظر ما هستش.
چون برای اولین با میخوایم گزارش رو بسازیم تنها باید با استفاده از تابع Design فرم ساختن گزارش رو لود کنیم.

Report.Design();

بعد از اجرای کد صفحه طراحی گزارش برای شما باز شده و در آنجا می توانید گزارش را بسازید و فایل آنرا ذخیره کنید.

بعد از ذخیره فایل با استفاده از تابع Load می توانید فایل ذخیره شده رو به عنوان ورودی پیش فرض به کلاس مورد نظر ارائه بدیم.
فایل ورودی می تواند یک آدرس یا Binary باشد که میتوان از Resource آنرا فراخوانی کرد.

Report.Load("ReportFile.mrt");

در صورت اجرای این کد می توانید برنامه را با صفحه ساخته شده باز نمایید.

حال میخواهید فقط صفحه نمایش پرینت لود شود که به جای دستور Design از دستور Show استفاده میکنیم.


شکل کلی دستورات



using Stimulsoft.Report;
namespace Print
{
class Print
{
public void PrintMain()
{
var FirstTable=new DataTable("FirstTable");

FirstTable.Columns.Add("Name");
FirstTable.Columns.Add("Famil");

FirstTable.Rows.Add("محمد","شریعتی");
FirstTable.Rows.Add("رضا","خسروانی");


var Report=new StiReport();
Report.RegData(FirstTable);
Report.Load("ReportFile.mrt");
Report.Desgin();
//OR
Report.Show();//
//OR
Report.Print();//


}

}

}

alexmcse
شنبه 10 بهمن 1394, 18:51 عصر
به صورت خلاصه نوشتن یک Extender به این صورت می باشد.

public static class Extender
{
public static int ToInt(this string item)
{
return int.Parse(item);
}
}


شما با کلاس بالا یک تابع به تمام string ها اضافه کردید که میتوانید تمامی آنها را تبدیل به int کنید.
نوشتن به همان صورت معمول می باشد ولی با این تفاوت که کلاس و توابع باید به صورت static باشند و قبل از parameter مورد نظر از کلمه this استفاده شود.

نحوه استفاده
var number="12333".ToInt();

سلام
دوست عزیز
از کلمه this خطا میگیرد همچنین نحوه استفاده آن را بیان کنیدتشکر