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

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

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

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

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

برای حل مشکل به روز نشدن اطلاعات DataGrid بعد از ویرایش، مطمین شوید که پس از انجام عملیات ویرایش، DataGrid را به درستی بروزرسانی می کنید. به احتمال زیاد بعد از ویرایش، نیاز دارید تا منبع داده ها را مجدداً بارگذاری کنید و یا از روش هایی برای به روزرسانی DataGrid استفاده کنید.

مثالی از نحوه به روزرسانی DataGrid بعد از ویرایش:

private void UpdateDataGrid()
{
    // بارگذاری مجدد داده ها
    var items = _dbContext.Items.ToList(); // به جای Items نام و جداول مناسب را قرار دهید
    dataGridView.DataSource = items; // dataGridView نام کنترل DataGridView شماست
}

همچنین شما می توانید در هنگام ویرایش، مستقیماً آیتم ویرایش شده را در DataGrid به روز کنید:

private void SaveChanges()
{
    // کد مربوط به ویرایش اطلاعات
    _dbContext.SaveChanges();

    // فرض کنید item نام شیء ویرایش شده است
    var item = _dbContext.Items.Find(updatedItemId); // updatedItemId شناسه آیتمی است که ویرایش شده است.

    // به روزرسانی منبع داده DataGrid
    var index = dataGridView.Rows.Cast()
                 .Where(r => (int)r.Cells["Id"].Value == item.Id) // "Id" به نام ستون ای دی تغییر دهید
                 .Select(r => r.Index).FirstOrDefault();

    if (index >= 0)
    {
        dataGridView.Rows[index].Cells["Name"].Value = item.Name; // اینجا نیز نام ستون ها را تغییر دهید
        // سایر ستون ها را نیز به روزرسانی کنید
    }
}

این روش ها می توانند به حل مشکل شما کمک کنند. اگر مشکل ادامه داشت، لطفاً جزییات بیشتری از کد خود ارایه دهید تا بتوانیم بهتر راهنمایی کنیم.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : 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
امتیاز: 1664 رتبه: 1
1 نظر
Tarak4135 : ممنون آقای بحرانی فرد از جوابتان ببخشید اگه همین پروژره با الگوی Unit Of Work بنویسیم برای نمونه سازی مجدد چکار باید کرد.در این الگو نمونه سازی در قسمت کانستراکتور به صورت تزریق انجام میشود. private IUOW _iuw; public frmListStudent(IUOW iuw) { InitializeComponent(); _iuw = iuw; }

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