بروز رسانی دیتاگرید بعد اعمال حذف،درج و ویرایش
با سلام
برای مبحث dataBinding در ویندوزم فرم از bindingsource استفاده میکردیم
ولی در wpf فرق میکنه
سرچ کردم و رسیدم به observablecollection
ولی هر کاری کردم نتونستم ازش استفاده کنم
حالا میخوام وقتی ی رکورد از جدول حذف میشه یا بهش اضافه میشه و ویرایش میشه دیتاگرید هم بروز بشه
نقل قول: بروز رسانی دیتاگرید بعد اعمال حذف،درج و ویرایش
پراپرتی Local از Entity مورد نظر ، از نوع ObservableCollection<Entity> خواهد بود.(قبلا در بخش C# و با bindingsource مثال زدم براتون)
در ساده ترین حالت کافیه داده های مورد نظر را Load کرده و از طریق ItemsSource و یا DataContext در کنترل مورد نظر نمایش بدید. در هنگام حذف ، اضافه و آپدیت کافیست از طریق Local عمل کنید. تغییرات در کنترل هم اعمال خواهند شد.
اگر هم نیاز به نمایش برخی از رکوردها دارید، میتونید رکوردهای مورد نظر رو قبل از متد Load با شرط مناسب انتخاب کنید.
و یا
میتونید یک ObservableCollection ایجاد کنید. در اینصورت برای اعمال تغییرات در context باید از رویداد CollectionChanged استفاده کنید.
http://blogs.u2u.be/diederik/post/20...-DataGrid.aspx
ویدئو زیر رو هم ببینید بد نیست
https://msdn.microsoft.com/en-us/data/ff806174.aspx
اگر کد بزارید ، میشه روی همون کد راهنمایی کرد.
نقل قول: بروز رسانی دیتاگرید بعد اعمال حذف،درج و ویرایش
روش بایندینگ در wpf بدین صورته که باید کلاستون رو تزیین کنید و کمی اونها رو تغییر بدید یجوری هوشمندش کنید
ایترفیس استاندارد INotifyPropertyChanged برای همین کار هست در فضای نام System.ComponentModel بهش دسترسی داریم
فرض کنیم کلاسی داریم بنام Person با دو فیلدهای نام و نام خانوادگی
public class Person : INotifyPropertyChanged
{
private string _firstName;
private string _lastName;
public string FirstName
{
set
{
_firstName = value;
if (PropertyChanged == null) return;
onPropertyChanged("FirstName");
}
get { return _firstName; }
}
public string LastName
{
set
{
_lastName = value;
if (PropertyChanged == null) return;
onPropertyChanged("LastName");
}
get { return _lastName; }
}
public event PropertyChangedEventHandler PropertyChanged;
private void onPropertyChanged(string propertyName)
{
if (PropertyChanged == null) return;
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
به محض ارث بری از INotifyPropertyChanged یک event و متد PropertyChangedEventHandler برای هوشمند کردن پروپرتیهای کلاسمون پیاده سازی میشه که باید کمی تغییرات مثل مثال بالا درونش بدیم
خب برای اینکه بخایم یک لیست از کلاس person بسازیم کافیه توی کد برنامه یا( اگر پترن MMVM استفاده میکنید در یک ViewModel) یک Prop از نوع جنریک ObservableCollection میسازیم
private ObservableCollection<Person> _personss;
public ObservableCollection<Person> Persons
{
get { return _personss; }
set
{
if (_personss!= value)
{
_personss= value;
onPropertyChanged("persons");
}
}
}
دقت کنید لیست جنریک هم با onPropertyChanged در قسمت set پراپرتی هوشمند شده البته میتونید یک پراپرتی ساده هم بسازید
public ObservableCollection<Person>Persons{get;set;}
ولی این کار باعث میشه که وقتی لیست Persons هوشمند نیاشه و باید بعد از پر کردن لیست یک دستور دیگه بنویسیم
در این کلاستون هم فراموش نکنید که از اینترفیس INotifyPropertyChanged ارث بری بشه و پیاده سازی بشه
حالا کافیه در یک متد یا در سازنده کلاس این لیست مقدار دهی بشه
public class PerdonViewModel : INotifyPropertyChanged
{
private ObservableCollection<Person> _personss;
public ObservableCollection<Person> Persons
{
get { return _personss; }
set
{
if (_personss!= value)
{
_personss= value;
onPropertyChanged("persons");
}
}
}
public PersonViewModel()
{
people = new ObservableCollection<Persons>
{
new Person { FirstName = "ali", LastName = "ebrahimi" },
new Person { FirstName = "reza", LastName = "rezaii" },
new Person { FirstName = "Amir", LastName = "ebrahimi" },
};
}
حالا این لیست رو میتونید در قسمت xaml بایند کنید به یک گراید
نقل قول: بروز رسانی دیتاگرید بعد اعمال حذف،درج و ویرایش
جناب Mahmoud.Afrad بنا به جلمه راپرتی Local از Entity مورد نظر ، از نوع ObservableCollection<Entity> خواهد بود راستش نتونستم استفاده کنم به چه شکل هستش؟
جناب ali_md110 نمیشه این کار ها در xaml انجام داد ؟
چون من ستون هام را به این شکل bind کردم
<DataGridTextColumn Header="کد " Width="70" Binding="{ Binding ID}">
نقل قول: بروز رسانی دیتاگرید بعد اعمال حذف،درج و ویرایش
روشتون درسته بایندینگ همینجوره
ولی خاصیت ItemSource گراید رو ست کنید به لیست persons و دیتاکانتکست فرم رو هم برابر با PerdonViewModel قرار بدید
نقل قول: بروز رسانی دیتاگرید بعد اعمال حذف،درج و ویرایش
ممنون
ولی من لیست ندارم میشه بگید برای ست کردن به یک جدول چکار کنم؟
1 ضمیمه
نقل قول: بروز رسانی دیتاگرید بعد اعمال حذف،درج و ویرایش
یک مثال mvvm قبلا فرستاده بودم برا یکی از دوستان
نگاش کنید راهنمایی میکنه اگر سوال داشتید بپرسید راهنمایی کنم
نقل قول: بروز رسانی دیتاگرید بعد اعمال حذف،درج و ویرایش
این فقط ی لیست را لود میکنه
درج نداره که؟
حالا که بحث mvvm را اوردید وسط میشه بگید فرقش با برنامه نویسی سه لایه چیه؟
نقل قول: بروز رسانی دیتاگرید بعد اعمال حذف،درج و ویرایش
اعمال درج و ویرایش و حذف هم خیلی راحته
این مثال فرستادم جهت آشنایی با روش MVVM و بایندینگ
این بحث لایه بندی و سه لایه بودن رو از ذهنتون بیرون کنید
ممکنه توی یک برنامه نیاز به 5 لایه باشه که هممگی دست به دست هم میدن و با برنامه اضلی اطلاعات ردوبدل میکنند
مبحث سه لایه بودن و اینکه یک لایه وظیفه دسترسی داده و دیگری وظیفه ولیدیشن و لایه سوم لایه دسترسی داشته باشه همگی جمع شدند در MVVM
وقتی روی یک پروژه گزوهی کار میکنید ممکنه یک نفر فقط طراحی برنامه رو انجام بده و یکی دیگه کد نویسی
خب mvvm میاد کد نویسی رو از طراحی جدا میکنه و Code behiend دیگه وجود نداره و کدهای برنامه انتقال داده میشه به یک لایه دیگه
و یک لایه دیگه هم مثلا بنام DataAccess میشه لایه دیتا و یا همون EF
شما میتونید کدهای درج و ویرایش یا همون CRUD رو انتقال بدید به یک لایه مجزا بنام SERVICE LAYER
و لایه ViewModel بیاد از این سرویسها استفاده بکنه و در اختیار لایه UI قرار بده در واقع بخش فرماندهی برنامه میشه ViewModel
از یک لایه دیگه هم میتونید در این الگو برای ترزیق وابستگیهای برنامه استفاده کنید مبحث Dependency injection مطالعه کنید
نظر من اینه اگر میخاید بهتر برنامه بنویسید و پیشرفته تر کمی از سنتی برنامه نویسی کردن جدا بشید و الگوهای شیرین و جذابMVC یا MVVM رو انتخاب کنید
نقل قول: بروز رسانی دیتاگرید بعد اعمال حذف،درج و ویرایش
ممنون ولی حالا mvc فرقش چیه با mvvm
نقل قول: بروز رسانی دیتاگرید بعد اعمال حذف،درج و ویرایش
نقل قول:
نوشته شده توسط
negar.rafie
ممنون ولی حالا mvc فرقش چیه با mvvm
mvvm و mvc هر دو الگوهایی هستند که شبیه هم هستند mvc تحت وب کاربرد داره ولی mvvm هم وب و هم ویندوزی
تفاوتشون توی حرف C در Mvc و VM در MVVM مشخص میشه
Mمخفف model هست در هر دو الگو یعنی کلاسی که حاوی کلاسهای ef هستند
v مخفف view در هر دو الگو هست یا همون رابط کاربری که میتونه یک صفحه وب باشه یا فرم wpf
vm توی mvvm یعنی viewmodel همونجایی که کدهای برنامه نوشته میشن و با سیم کشی هایی که انجام میدیم( منظورم Binding هست ) فیلدها یا لیست ها به کنترلهای فرم وصل میکنیم
و c توی mvc میشه Controllerکه معادل viewmodel هست ولی با روشی متفاوت تر اطلاعات رو به سمت ویو ارسال یا از اون دریافت می کنه
خیلی سخت نگیرین این الگوهها خیلی ساده هستند و در عین سادگی سرعت برنامه نویسی شما رو چند برابر میکنند
همچنین نگهداری و توسعه برنامه در آینده خیلی بهتر میشه
نقل قول: بروز رسانی دیتاگرید بعد اعمال حذف،درج و ویرایش
public void SelectAll()
{
OleDbConnection con = new OleDbConnection(strconnection);
OleDbCommand com = new OleDbCommand("SELECT * FROM tbname", con);
OleDbDataAdapter adapter = new OleDbDataAdapter(com);
DataSet ds = new DataSet();
adapter.Fill(ds, "tbname");
DataTable dtContact = ds.Tables[0];
dataGridView1.DataSource = dtContact;
dataGridView1.Columns[0].HeaderText = "ردیف";
dataGridView1.Columns[1].HeaderText = "نام";
dataGridView1.Columns[2].HeaderText = "نقش";
dataGridView1.Columns[3].HeaderText = "نام کاربری";
dataGridView1.Columns[4].HeaderText = "شماره تلفن";
dataGridView1.Columns[5].HeaderText = "رمزعبور";
dataGridView1.AlternatingRowsDefaultCellStyle.Back Color = Color.LightBlue;
}
در فرم لود هم کد زیر رو قرار بدید:
SelectAll();