منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : wpf tips- The DataGrid part2
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
كاتب الموضوع : !TheCodeOfSilence

بسم الله الرحمن الرحيم

لنكمل الحديث عن datagrid
رابط الموضوع الاول
http://vb4arb.com/vb/showthread.php?1747
لاننا سنستخدمه نفس الطريقة
سنقوم في هذا المثال باضافه بيانات الى مشتريات العميل ولكن كيف
سنستخدم 2 textbox , button لاضافة البيانات
سنقوم بتجهيز datagrid كما في المثال السابق

اولا يجب علينا استيراد namespace الاتي


كود :
using System.ComponentModel;
ما سنفعله الان هو ربط الجريد ب list والتعامل مع list وليس الجريد ولكن سنستخدم BindingList وذلك من اجل التعامل مع ال binding فى wpf حيث ان list لا تدعم notification


كود :
BindingList<PurchaseData> PD = new BindingList<PurchaseData>();
ولكن سنقوم باجراء بعض التغيرات على ال class الخاصة بالمشتريات لتصبح كالاتي


كود :
public class PurchaseData : INotifyPropertyChanged
{
private string _ItemName;
private decimal _ItemPrice;

public string ItemName
{
get { return _ItemName; }
set
{
_ItemName = value;
OnPropertyChanged("ItemName");
}
}


public decimal ItemPrice
{
get { return _ItemPrice; }

set
{
_ItemPrice = value;
OnPropertyChanged("ItemPrice");
}
}

public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}

}
وفي حدث load سنقوم بربط الجريد كالاتي


كود :
dataGrid2.ItemsSource = PD;
فالجريد ستقوم بعرض ما هو موجود داخل BindingList وستقوم بالتحديث تلقائيا عند تحديث ال binding list
والان سنتعامل فقط مع الbinding list فلاضافة بيانات نقوم بالاتي

كود :
PurchaseData P = new PurchaseData();
P.ItemName = textBox1.Text;
P.ItemPrice = decimal.Parse(textBox2.Text);

PD.Add(P);
وعندما يقوم المستخدم بحذف اى سطر من الجرد فسيتم تحديث bindingList تلقائيا
كما يمكن ان نقوم بجمع المشتريات كما فى المثال السابق ولكن هناك مشكله فلا يوجد حدث في الجرد لحذف سطر ولذلك كما قلنا سنعتمد على bindingList
ولكن كيف
bindingList لديها حدث ListChangedEventHandler ويتم استخدامه كالاتي

كود :
PD.ListChanged += new ListChangedEventHandler(PD_ListChanged);
void PD_ListChanged(object sender, ListChangedEventArgs e)
{

}
هذا الحدث يتم اطلاقة عند حدوث اى تغير فى list لذا فيمكنك كتابة كود تجميع المشتريات فى هذا الحدث ويتم تحديث
المجموع تلقائيا