دسته بندی ها
18:34 1401/03/27

نمایش تغییرات در DataGrid بعد از ویرایش در الگوی Unit Of Work

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

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 2023
هوش مصنوعی

پاسخ هوش مصنوعی

برای حل مشکل به روز رسانی DataGrid بعد از ویرایش، باید اطمینان حاصل کنید که منبع داده ی DataGridView حقیقی در هر بار ویرایش به روز می شود. یکی از دلایل عدم مشاهده تغییرات در DataGridView می تواند عدم بروز رسانی آن به دلیل تغییر Reference در Object در DataGrid باشد. به عنوان یک راه حل، می توانید مرحله بارگذاری مجدد دیتا را بعد از بستن فرم ویرایش با استفاده از event واقعه FormClosed انجام دهید.

در اینجا یک مثال از نحوه اعمال این تغییرات آورده شده است:

ابتدا در کلاس frmNewEditeStudent در بخش btnEditSave_Click، بعد از عمل ویرایش و قبل از بستن فرم، نام event برای فرم خود را تغییر دهید تا بتوانید آن را در فرم اصلی دریافت کنید:


private void btnEditSave_Click(object sender, EventArgs e)
{
    var model = _iuw.StudentRepositoryUW.Get(x => x.stdId == id).FirstOrDefault();
    model.StudentName = txtStudentName.Text;
    _iuw.StudentRepositoryUW.Update(model);
    _iuw.save();
    
    variable.id = 0;
    this.DialogResult = DialogResult.OK; // رپورٹ های برنامه (State) به روز شود
    this.Close();
}

سپس در فرم frmListStudent، می توانید از event FormClosed استفاده کنید تا یک بار دیگر LoadDataGrid() را صدا بزنید:


private void OpenForm()
{
    var container = new StructureMap.Container(new Model.IOC.TypeRegistry());
    var frm = container.GetInstance();
    frm.FormClosed += (s, args) => LoadDataGrid(); // بارگذاری مجدد بعد از بستن فرم
    frm.ShowDialog();
}

با این تغییرات، پس از ویرایش و بسته شدن فرم ویرایش، جدول دانش آموزان بلافاصله به روز خواهد شد و تغییرات لازم قابل مشاهده خواهد بود.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 16:57 1401/03/28

نمایش تغییرات رکورد بعد از Update

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

شما قبلا این سوال رو در لینک زیر مطرح کردید و گفتم که باید برای نمایش کپی جدید از اطلاعات بعد از ویرایش یکبار دیتابیس رو new کنید یا نمونه سازی کنید.

به روزنشدن اطلاعات DataGrid بعد از ویرایش در dotnet Core

خب وقتی شما از الگوی UnitOfWork استفاده می کنید به طور مستقیم به دیتابیس دسترسی ندارید و نمی تونید دیتابیس رو نمونه سازی کنید. خب در این موارد می تونید از متدهای خود Entity Framework استفاده کنید و اطلاعات رو ReLoad کنید.

 

افزودن متد Refresh در کلاس Unit Of Work

ابتدا متدی به نام Refresh در کلاس UnitOfWork اضافه کنید:

public void Refresh(object T)
{
   _context.Entry(T).Reload();
}

همونطور که میبینید این متد یک ورودی از نوع object داره که این ورودی همون رکورد یا ردیفی هست که اطلاعاتش ویرایش شده. (خب این متد رو داخل اینترفیس هم تعریف کنید.)

 

حالا به راحتی می تونیم از این متد در فرم استفاده کنیم.

public void LoadDataGrid(int id = 0)
{
   if (id == 0)
   {
      var list = _iuw.StudentRepositoryUW.Get().ToList();
      dataGridView1.DataSource = list;
   }
   else
   {
      _iuw.newRefresh(_iuw.StudentRepositoryUW.GetById(id));
      var list = _iuw.StudentRepositoryUW.Get().ToList();
      dataGridView1.DataSource = list;
   }
}

متد LoadDataGrid رو به صورت بالا تغییر دادیم. یک پارامتر ورودی به نام id با مقدار پیش فرض 0 هم قرار دادیم. اگر مقدار پارامتر 0 باشه که هیچی اطلاعات عادی نشون داده میشه. اما اگر مقدار id بزرگتر است 0 باشه یعنی این متد برای ویرایش صدا زده شده و اون رکورد رو رفرش شده نمایش میدیم.

 

متد BtnEdit_Click

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

 

دانلود سورس اصلاح شده

به این پاسخ امتیاز بدهید    1
امتیاز: 1664 رتبه: 1
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود