دسته بندی ها
08:35 1401/03/22

به روز نشدن اطلاعات DataGrid بعد از ویرایش در پروژه Windows Dotnet Core

مشخصات سوال کننده :
کاربر : Tarak4135     امتیاز کاربر : 56     رتبه کاربر : 17
دسته بندی : سی شارپ Entity Framework

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 2782
پاسخ دهنده : saedbfd 19:14 1401/03/22

ببینید شما وقتی در فرم روی دکمه ویرایش کلیک می کنید Id کاربر رو دریافت می کنید و به فرم ویرایش منتقل می کنید. کد زیر :

private void btnEdit_Click(object sender, EventArgs e)
{
   variable.id = int.Parse(dataGridView1.CurrentRow.Cells[0].Value.ToString());
   OpenForm();
   LoadDataGrid();
}

خب در متد OpenForm هم که فرم ویرایش رو صدا می زنید و نمایشش میدید

private void OpenForm()
{
   frmNewEditeStudent frm = new frmNewEditeStudent();
   frm.ShowDialog();
}

بعد از اینکه فرم ویرایش باز شد و اطلاعات رو ویرایش کردید و دکمه ویرایش رو زدید عملیات ویرایش اطلاعات انجام میشه. 

private void btnEditSave_Click(object sender, EventArgs e)
{
   var model = db.tblStudent.Where(x => x.stdId == id).FirstOrDefault();
   model.StudentName = txtStudentName.Text;
   db.tblStudent.Update(model);
   db.SaveChanges();

   variable.id = 0;
   this.Close();
}

خب دقت کنید اطلاعات در اینجا در دیتابیس ویرایش میشه اما وقتی دستور this.close اجرا میشه و فرم ویرایش بسته میشه و به فرم اول برمیگردید دستور LoadDataGrid صدا زده میشه و در اینجا هم کد زیر رو دارید:

public void LoadDataGrid()
{
   var list = db.tblStudent.ToList();
   dataGridView1.DataSource = list;
}

نکته : خب نکته در همینجاست، درسته که شما مجدد کوئری رو اجرا می کنید. اما این کوئری از db داره اجرا میشه و db در این لحظه آپدیت های رکوردهای دیتابیس رو درون خودش نداره و چیزی از آپدیت رو نمی تونید ببینید.

اما راه حل : کدهای بالا که همه کدهای خودتون بود. راه حل فقط یک خط کد هست و در ادامه میگم بهتون

public void LoadDataGrid()
{
   //در اینجا باید یک بار دیگر دیتابیس را نمونه سازی کنید.
   db = new SchoolContext();
   var list = db.tblStudent.ToList();
   dataGridView1.DataSource = list;
}

باید دیتابیس رو مجدد نمونه سازی کرد تا همه تغییرات شامل آپدیت ها و اضافه و حذف ها رو شامل بشه. 

 

سورس کامل پروژه و بدون اشکال

ویرایش شده در یکشنبه 22 خرداد 1401 ساعت 19:15:44
به این پاسخ امتیاز بدهید    1
امتیاز: 1654 رتبه: 1
1 نظر
Tarak4135 : ممنون آقای بحرانی فرد از جوابتان ببخشید اگه همین پروژره با الگوی Unit Of Work بنویسیم برای نمونه سازی مجدد چکار باید کرد.در این الگو نمونه سازی در قسمت کانستراکتور به صورت تزریق انجام میشود. private IUOW _iuw; public frmListStudent(IUOW iuw) { InitializeComponent(); _iuw = iuw; }

امتیاز کاربر : 56   رتبه کاربر : 17   تاریخ ثبت : 10:07 1401/03/22
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود