• 1405/07/01

تمرین جلسه 62-کنترل به هم ریختن آرایه در وقت حذف :

سلام استاد مداینی عزیز ، تمرین جلسه 62 که وقتی کاربر رو حذف میکردیم ایندیکس آرایه بهم میریخت رو حالا با تقلب که تو ویدیو رسوندید حل کردم ، امیدواردم درست انجام  داده باشم 

 

اول تو دیتاگرید ویو یه ستون به اسم index ساختم و visible اش رو false کردم

 

در مرحله بعد به کلاس پرسن یه پروپرتی جدید از نوع int به نام IndexID ساختم که کد کلاس Person به این صورت تغییر کرد 

internal class Person
{
    public int IndexID { get; init; }
    public string Name { get; init; }
    public string Family { get; init; }
    public string? Email { get; set; }
    public string? Mobile { get; set; }
    public string Position { get; set; }
}

حالا در فرم افزودن تو رویداد ثبت با نمونه سازی کلاس پرسن که اسم و فامیلی را پر کرده بودم اندیکس رو برابر IndexID= Database.index قرار دادم که کدش به این صورت تغییر کرد

private void btnSave_Click(object sender, EventArgs e)
{
    if (txtName.Text != "" && txtFamily.Text != "")
    {
        Person person = new Person()
        {
            Name = txtName.Text,
            Family = txtFamily.Text,
            IndexID = Database.index
        };
        person.Email = txtEmail.Text;
        person.Mobile = txtMobile.Text;

        if (rbStudent.Checked)
        {
            person.Position = "student";
        }
        else if (rbteacher.Checked)
        {
            person.Position = "teacher";
        }
        else
        {
            person.Position = "employee";
        }


        try
        {
            Database.list[Database.index] = person;
            Database.NextIndex();
        }
        catch
        {
            MessageBox.Show("خارج از محدوده اشتراک خود ثبت کرده اید");
        }

        this.Close();
    }
    else
    {
        MessageBox.Show("برای ثبت اطلاعات نام و نام خانوادگی اجباری میباشد");
    }
}

در نهایت تو دکمه حذف مقدار ستون index که به گرید ویو اد کرده بودم را دریافت کردم و آن را نال کردم 

 private void btnDeletePerson_Click(object sender, EventArgs e)
 {
     var input = dgvPersons.CurrentRow.Cells[5].Value;
     int index= Convert.ToInt32(input);
     Database.list[index] = null;
     Bindgrid();
 }

حالا این کد وقتی تو 10 تا عضو شروع میکنیم به حذف کردن ایندیکس بهم نمیریزه اما وقتی حذف چون ایندیکس حذف نمیشه و فقط null میشه اگر مثلا 2 کاربر حذف شد نمیشه دیگه کاربر اضافه کرد چون ارایه پر شده و باتن هم غیر فعال نمیشه چون ردیف فقط 8 شخص داره برا همین این رو نتونستم کنترول کنم و در فرم افزودن در دکمه ثبت با try catch کنترول کردم که تو نمونه قبلی try catch گذاشته بودم برا هیمن دلیل.

 

امیدوارم براتون قابل قبول بوده باشه.

  • 1405/07/01
  • ساعت 20:53

بسیار عالی