سلام استاد شبتون بخیر و خوشی
استاد تمرینی که گفته بودید رو انجام دادم ولی به یه مشکلی برخوردم.
من متوجه شدم وقتی فرم ویرایش شخص بسته میشه و متد BindGrid اجرا میشه تغییراتی که اعمال کردیم توی جدول اعمال نمیشه.
ولی وقتی فرم لیست اشخاص رو بستم و دوباره باز کردم دیدم متد BindGrid درست کار کرده و جدول بروز شده.
این مشکل فقط توی همین فرم پیش اومد و توی بقیه فرم ها درست کار میکرد. تغییرات توی دیتابیس اعمال میشد ولی برای اینکه متد BindGrid درست کار کنه باید دوباره فرم لیست اشخاص باز میشد.
من هر کاری کردم تا مشکل برطرف بشه ولی نشد. آخرش یاد جلسه SeedData افتادم که using رو معرفی کرده بودید و منم یه امتحانی کردم و متد Bindgrid رو اینبار با using نوشتم و مشکل رفع شد. ولی اصلا نفهمیدم مشکل از کجا بود و چجوری درست شد!
متد BindGrid:
void BindGrid()
{
using (TopLearn_DB_Context context = new TopLearn_DB_Context())
{
var data = context.People.ToList();
dgvPeople.Rows.Clear();
foreach (var person in data)
{
dgvPeople.Rows.Add(person.PersonId,
person.FirstName,
person.LasName,
person.Mobile,
person.Email,
person.IsTeacher ? "استاد" : "دانشجو",
person.CreateDate.ToShamsi());
}
}
}BtnEdit:
private void btnEdit_Click(object sender, EventArgs e)
{
if (dgvPeople.CurrentRow != null)
{
string id = dgvPeople.CurrentRow.Cells[0].Value.ToString();
int personId = int.Parse(id);
frmEditPerson frmEditPerson = new frmEditPerson(personId);
var result = frmEditPerson.ShowDialog();
if (result == DialogResult.OK)
{
BindGrid();
}
}
}frmEditPerson:
using DataLayer.Context;
using DataLayer.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Utilities.Validation;
namespace TopLearn_School.People
{
public partial class frmEditPerson : Form
{
int _personId;
Person _person;
TopLearn_DB_Context _context = new TopLearn_DB_Context();
public frmEditPerson(int personId)
{
InitializeComponent();
_personId = personId;
_person = new Person();
_person = _context.People.Single(p => p.PersonId == personId);
txtFirstName.Text = _person.FirstName;
txtLasName.Text = _person.LasName;
txtEmail.Text = _person.Email;
txtMobile.Text = _person.Mobile;
rbTeacher.Checked = _person.IsTeacher;
}
#region Validating Information
bool IsInformationValid()
{
bool isValid = true;
ValidationResult validationResult = new ValidationResult();
validationResult = txtFirstName.Text.IsPersianTextValid();
if (!validationResult.IsValid)
{
isValid = false;
epErrorProvider.SetError(txtFirstName, validationResult.ErrorMessage);
}
else
{
epErrorProvider.SetError(txtFirstName, string.Empty);
}
validationResult = txtLasName.Text.IsPersianTextValid();
if (!validationResult.IsValid)
{
isValid = false;
epErrorProvider.SetError(txtLasName, validationResult.ErrorMessage);
}
else
{
epErrorProvider.SetError(txtLasName, string.Empty);
}
if (txtEmail.Text.IsWhiteSpace())
{
epErrorProvider.SetError(txtEmail, string.Empty);
txtEmail.Text = string.Empty;
}
else
{
validationResult = txtEmail.Text.IsEmailValid();
if (!validationResult.IsValid)
{
isValid = false;
epErrorProvider.SetError(txtEmail, validationResult.ErrorMessage);
}
else
{
epErrorProvider.SetError(txtEmail, string.Empty);
}
}
validationResult = txtMobile.Text.IsMobileValid();
if (!validationResult.IsValid)
{
isValid = false;
epErrorProvider.SetError(txtMobile, validationResult.ErrorMessage);
}
else
{
epErrorProvider.SetError(txtMobile, string.Empty);
}
return isValid;
}
private void txtFirstName_Validating(object sender, CancelEventArgs e)
{
ValidationResult validationResult = txtFirstName.Text.IsPersianTextValid();
if (!validationResult.IsValid)
{
epErrorProvider.SetError(txtFirstName, validationResult.ErrorMessage);
}
else
{
epErrorProvider.SetError(txtFirstName, string.Empty);
}
}
private void txtLasName_Validating(object sender, CancelEventArgs e)
{
ValidationResult validationResult = txtLasName.Text.IsPersianTextValid();
if (!validationResult.IsValid)
{
epErrorProvider.SetError(txtLasName, validationResult.ErrorMessage);
}
else
{
epErrorProvider.SetError(txtLasName, string.Empty);
}
}
private void txtEmail_Validating(object sender, CancelEventArgs e)
{
if (txtEmail.Text.IsWhiteSpace())
{
txtEmail.Text = string.Empty;
epErrorProvider.SetError(txtEmail, string.Empty);
}
else
{
ValidationResult validationResult = txtEmail.Text.IsEmailValid();
if (!validationResult.IsValid)
{
epErrorProvider.SetError(txtEmail, validationResult.ErrorMessage);
}
else
{
epErrorProvider.SetError(txtEmail, string.Empty);
}
}
}
private void txtMobile_Validating(object sender, CancelEventArgs e)
{
ValidationResult validationResult = txtMobile.Text.IsMobileValid();
if (!validationResult.IsValid)
{
epErrorProvider.SetError(txtMobile, validationResult.ErrorMessage);
}
else
{
epErrorProvider.SetError(txtMobile, string.Empty);
}
}
#endregion
private void btnCancle_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
}
private void btnEdit_Click(object sender, EventArgs e)
{
if (IsInformationValid())
{
_person.FirstName = txtFirstName.Text;
_person.LasName = txtLasName.Text;
_person.Email = txtEmail.Text;
_person.Mobile = txtMobile.Text;
_person.IsTeacher = rbTeacher.Checked;
_context.People.Update(_person);
_context.SaveChanges();
DialogResult = DialogResult.OK;
}
}
}
}
بسیار عالی
جلوتر علتش را متوجه خواهید شد
خیلی ممنون استاد
جلسه بعدی رو هم دیدم و فهمیدم چیشد. ولی هنوزم برام سواله چرا وقتی شخص جدیدی اضافه میشه این اتفاق نمیفته؟
تو هر دو تاشون _context داخل فرم افزودن یا ویرایش با دیتابیس کار میکنه ولی فقط موقع ویرایش این اتفاق میفته.
در جلسات بعد متوجه خواهید شد
حله استاد
خیلی ممنون 🌺🙏