public partial class frmEditPerson : Form
{
private int _personId;
Toplearn_Db_Context _context = new Toplearn_Db_Context();
public frmEditPerson(int personId)
{
_personId = personId;
InitializeComponent();
}
private void frmEditPerson_Load(object sender, EventArgs e)
{
ShowPersonData();
}
private void btnSave_Click(object sender, EventArgs e)
{
if (IsValidateInputs())
{
if (txtName.Text != "مدیریت")
{
Person person = new Person();
person.PersonId = _personId;
person.Name = txtName.Text;
person.Family = txtFamily.Text;
person.Age = Convert.ToInt32(nudAge.Value);
person.Mobile = txtMobile.Text;
person.Email = txtEmail.Text;
if (rbTeacher.Checked == true)
{
person.IsTeacher = true;
}
var result = PersianMsBox.Show("از ویرایش کاربر مد نظر اطمینان دارید؟", "هشدار", PersianMsbox_button.YesNo, PersianMsBox_Icons.Warning);
if (result == DialogResult.Yes)
{
this.DialogResult = DialogResult.Yes;
_context.people.Update(person);
_context.SaveChanges();
this.Close();
}
}
else
{
PersianMsBox.Show("نام وارد شده (مدیریت) منحصر به فرد مدیر آموزشگاه میباشد .", "خطای ویرایش اطلاعات", PersianMsbox_button.Ok,
PersianMsBox_Icons.Error);
txtName.Text = "";
}
}
}
#region person Data
private void ShowPersonData()
{
var data = _context.people.AsNoTracking().First(p => p.PersonId == _personId);
txtName.Text = data.Name;
txtFamily.Text = data.Family;
nudAge.Value = data.Age;
txtMobile.Text = data.Mobile;
txtEmail.Text = data.Email;
if (data.IsTeacher)
{
rbTeacher.Checked = true;
}
}
#endregion
#region Validate Inputs
private bool IsValidateInputs()
{
bool isValid = true;
if (string.IsNullOrEmpty(txtName.Text))
{
isValid = false;
lblValidateName.Visible = true;
}
else
{
lblValidateName.Visible = false;
}
if (string.IsNullOrEmpty(txtFamily.Text))
{
isValid = false;
lblValidateFamily.Visible = true;
}
else
{
lblValidateFamily.Visible = false;
}
if (string.IsNullOrEmpty(txtMobile.Text))
{
lblValidateMobile.Visible = true;
isValid = false;
}
else
{
lblValidateMobile.Visible = false;
}
if (nudAge.Value < 1)
{
lblValidateAge.Visible = true;
isValid = false;
}
else
{
lblValidateAge.Visible = false;
}
return isValid;
}
#endregion
}
private void btnEditPerson_Click(object sender, EventArgs e)
{
if (dgvPersonList.CurrentRow != null)
{
string name = dgvPersonList.CurrentRow.Cells[1].Value.ToString();
if (name != "مدیریت")
{
string id = dgvPersonList.CurrentRow.Cells[0].Value.ToString();
int personId = Convert.ToInt32(id);
frmEditPerson editPerson = new frmEditPerson(personId);
var result = editPerson.ShowDialog();
if (result == DialogResult.Yes)
{
dgvPersonList.Rows.Clear();
var data = _context.people.AsNoTracking().ToList();
foreach (var item in data)
{
dgvPersonList.Rows.Add(item.PersonId, item.Name,
item.Family,
item.Age,
item.Email,
item.Mobile,
item.IsTeacher ? "استاد" : "دانشجو",
item.CreatDate.ToShamsi());
}
}
}
else
{
PersianMsBox.Show("اطلاعات مدیریت اموزشگاه قابل ویرایش نمیباشد!", "خطای ویرایش اطلاعات", PersianMsbox_button.Ok,
PersianMsBox_Icons.Error);
}
}
else
{
PersianMsBox.Show("لطقا یک کاربر را برای ویرایش انتخاب کنید!", "هشدار", PersianMsbox_button.Ok, PersianMsBox_Icons.Warning);
}
}سلام استاد عزیز وقتتون بخیر خسته نباشید استاد بنده این تمرین رو انجام دادم فقط دو قسمت مشکل داشت که وقتی تحقیق کردم مشکل از چی هست فهمیدم ردیاب اون لیست ما هست البته ردیاب دیتا بیس اگه اشتباه نکنم. بعد یکم جست و جو کردم متوجه شدم که ما دوتا ردیاب نمیتونیم در فرم داشته باشیم . وقتی از یه ردیاب استفاده میکنیم(یعنی استفاده از متود هایی که بر اساس یک کلید میاد اون رکورد هارو زیر نظر میگیره) و اماده میشه که اون رکورد هارو تغییر بده.ولی یه متودی به اسم AsNoTracking هست که به ردیاب میفهمونه که فقط اون رکورد رو مجددا بخونه و لازم نیست تغییری بده و به همین دلیل میتونیم دوتا ردیاب داشته باشیم و دیگه اروری پیش نمیاد.
استاد نمیدونم کار درستی کردم که جست و جو کردم تا مشکل رو پیدا کنم که بفهمم از چی بوده یا نه ممنون میشم نظرتون بگید
پایدار باشید
سلام
بسیار عالی
بله کار درستی کردید و درستش همینه ، باید ماهیگیری را یاد بگیرید نه اینکه منتظر باشید کسی برای شما ماهی بگیرد
عالی بود
خیلی ممنونم استاد عزیز چون حقیقتا من انگلیسیم در حد متوسطه اگه اروری توی برنامه پیش بیاد اول سعی میکنم با استفاده از Break Point بفهمم کدم چه ایرادی داره ولی یه سری ارور ها رو واقعا متوجه نمیشم و برای همین باید جست و جو کنم تا بفهمم از چیه و ایا متودی برای رفع اون مشکل هست یا نه و میخواستم بدونم این کاری که میکنم درست هست یا خیر که پاسخ دادید ممنونم از شما استاد
سلامت باشید دوست من