مانده هر ردیف = مانده ردیف قبل + مبلغ بدهکار ردیف جاری - مبلغ بستانکار ردیف جاری
نحوه پیاده سازی این گزارش با PdfReport:
خروجی نهایی:
قسمت اول : تبادل دادهها بین لایه ها- قسمت اول
روش دوم: Uniform(Entity classes)
روش دیگر پاس دادن دادهها، روش uniform است. در این روش کلاسهای Entity، یک سری کلاس ساده به همراه یکسری Property های Get و Set میباشند. این کلاسها شامل هیچ منطق کاری نمیباشند. برای مثال کلاس CustomerEntity که دارای دو Property ، Customer Name و Customer Code میباشد. شما میتوانید تمام Entity ها را به صورت یک پروژهی مجزا ایجاد کرده و به تمام لایهها رفرنس دهید.
public class CustomerEntity { protected string _CustomerName = ""; protected string _CustomerCode = ""; public string CustomerCode { get { return _CustomerCode; } set { _CustomerCode = value; } } public string CustomerName { get { return _CustomerName; } set { _CustomerName = value; } } }
خوب، اجازه دهید تا از CustomerDal شروع کنیم. این کلاس یک Collection از CustomerEntity را بر میگرداند و همچنین یک CustomerEntity را برای اضافه کردن به دیتابیس . توجه داشته باشید که لایه Data Access وظیفه دارد تا دیتای دریافتی از دیتابیس را به CustomerEntity تبدیل کند.
public class CustomerDal { public List<CustomerEntity> getCustomers() { // fetch customer records return new List<CustomerEntity>(); } public bool Add(CustomerEntity obj) { // Insert in to DB return true; } }
لایه Middle از CustomerEntity ارث بری میکند و یکسری operation را به entity class اضافه خواهد کرد. دادهها در قالب Entity Class به لایه Data Access ارسال میشوند و در همین قالب نیز بازگشت داده میشوند. این مسئله در کد ذیل به روشنی مشاهده میشود.
public class Customer : CustomerEntity { public List<CustomerEntity> getCustomers() { CustomerDal obj = new CustomerDal(); return obj.getCustomers(); } public void Add() { CustomerDal obj = new CustomerDal(); obj.Add(this); } }
لایه UI هم با تعریف یک Customer و فراخوانی operation های مربوط به آن، دادهی مد نظر خود را در قالب CustomerEntity بازیابی خواهد کرد. اگر بخواهیم عمکرد روش uniform را خلاصه کنیم باید بگوییم، در این روش دیتای رد و بدل شدهی مابین کلیه لایهها با یک ساختار استاندارد، یعنی Entity پاس داده میشوند.
مزایا و معایب روش uniform
مزایا
·Strongly typed به صورت در تمامی لایهها قابل دسترسی و استفاده میباشد.
· به دلیل اینکه از ساختار عمومی Entity استفاده میکند، بنابراین فقط یکبار نیاز به تبدیل دادهها وجود دارد. به این معنی که کافی است یک بار دیتای واکشی شده از دیتابیس را به یک ساختار Entity تبدیل کنید و در ادامه بدون هیچ تبدیل دیگری از این Entity استفاده کنید.
معایب
· تنها مشکلی که این روش دارد، مشکلی است به نام Double Loop . هنگامیکه شما در مورد کلاسهای entity بحث میکنید، ساختارهای دنیای واقعی را مدل میکنید. حال فرض کنید شما به دلیل یکسری مسایل فنی دیتابیس خود را Optimize کرده اید. بنابراین ساختار دنیای واقعی با ساختاری که شما در نرم افزار مدل کردهاید متفاوت میباشد. بگذارید یک مثال بزنیم؛ فرض کنید که یک customer دارید، به همراه یکسری Address. همان طور که ذکر کردیم، به دلیل برخی مسایل فنی ( denormalized ) به صورت یک جدول در دیتا بیس ذخیره شده است. بنابراین سرعت واکشی اطلاعات بیشتر است. اما خوب اگر ما بخواهیم این ساختار را در دنیای واقعی بررسی کنیم، ممکن است با یک ساختار یک به چند مانند شکل ذیل برخورد کنیم.
بنابراین مجبوریم یکسری کد جهت این تبدیل همانند کد ذیل بنویسیم.
foreach (DataRow o1 in oCustomers.Tables[0].Rows) { obj.Add(new CustomerEntyityAddress()); // Fills customer foreach (DataRow o in oAddress.Tables[0].Rows) { obj[0].Add(new AddressEntity()); // Fills address } }
// ASPX page <telerik:RadGrid ID="RadGrid1" runat="server"></telerik:RadGrid> // Asp.Net Code Behind protected void Page_Load(object sender, EventArgs e) { GridPresenter presenter = new GridPresenter(this); } // view interface public interface IGridView { Telerik.Web.UI.RadGrid myGrid { get; } } // presenter protected readonly IGridView _view; public GridPresenter(IGridView view) { _view = view; _view.myGrid.UpdateCommand += new Telerik.Web.UI.GridCommandEventHandler(onUpdateCommand); _view.myGrid.InsertCommand += new Telerik.Web.UI.GridCommandEventHandler(onInsertCommand); _view.myGrid.EditCommand += new Telerik.Web.UI.GridCommandEventHandler(onEditCommand); } private void onUpdateCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e) { // Code for updating } private void onInsertCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e) { // Code for inserting } private void onEditCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e) { // Code for editcommand }
Controls 00:48:08
WinRT provides numerous XAML controls, which act as the building blocks of your applications.
Some of these will be familiar, while some are new to Metro.
Introduction
Command Controls
Demo: Application Bar
Context Menus
Demo: Context Menus
Application Settings
CheckBox, RadioButton, and ToggleSwitch
Progress Controls
Demo: Progress Controls
Displaying Text
Demo: Displaying Text
Text Entry
Sliders
Styling
WebView
UserControl
Summary