редактирование записи из списка в отдельной форме - PullRequest
0 голосов
/ 05 апреля 2019

В моей программе я разрешаю пользователю выбрать запись студента из списка, когда он нажимает кнопку редактирования, открывается новая форма.Эта форма отображает идентификатор и отметку студента, которого они выбрали.Мне необходимо разрешить пользователю редактировать эту отметку и обновлять список.У меня проблемы с разрешением пользователю редактировать, и буду признателен за любые советы по этому вопросу.(У меня проблемы с выяснением, что делать, когда у меня есть данные пользователей внутри формы редактирования) Спасибо.

Мне не разрешено использовать LINQ, поэтому решение или совет о том, как это сделать без него, будет с благодарностью.

Основная форма при нажатии кнопки редактирования:

private void btnEditMark_Click(object sender, EventArgs e)
{
    string[] s_rec_arr;

    if (lstMarks.SelectedIndex == -1)
    {
        MessageBox.Show("please select a student");
    }
    else
    {
        ModuleData.s_rec = lstMarks.SelectedItem.ToString();
        s_rec_arr = ModuleData.s_rec.Split(':');
        ModuleData.s_id = s_rec_arr[0];
        ModuleData.s_mark = s_rec_arr[1];
        editMark myEditRecordForm = new editMark(); // Opens a form called editMark
        this.Hide(); // Hides the previous form
        myEditRecordForm.ShowDialog(); // Shows the form
    }
}

Форма редактирования:

public partial class editMark : Form
{
    public editMark()
    {
        InitializeComponent();
        StartPosition = FormStartPosition.CenterScreen;
        txtStudentID.Focus();
    }


    private void btnSubmit_Click(object sender, EventArgs e)
    {

    }

    private void btnClose_Click(object sender, EventArgs e)
    {
        this.Hide();
        Form1 myForm = new Form1();
        myForm.ShowDialog();
    }

    private void editMark_Load(object sender, EventArgs e)
    {
        txtStudentID.Text = ModuleData.s_id;
        txtMark.Text = ModuleData.s_mark;
    }
}

1 Ответ

0 голосов
/ 19 апреля 2019

Я написал только те части кодов, которые я изменил. Другие части те же, что и у вас. И, как вы хотите, нет linq.

enter image description here

Сначала установите свойство Modifiers вашего listBox в Public для доступа к нему из другой формы.

Теперь мы идем с кодами.

Форма 1

public Form1()
{
    InitializeComponent();
    lstMarks.Items.Add("1:Bulutay"); //I don't know your list.This is my guess.
    lstMarks.Items.Add("2:Person2"); //
    lstMarks.Items.Add("3:Person3"); //
    lstMarks.Items.Add("4:Person4"); //
}

private void btnUpdate_Click(object sender, EventArgs e)
{
    string[] s_rec_arr;
    if (lstMarks.SelectedIndex == -1)
    {
        MessageBox.Show("please select a student");
    }
    else
    {
        ModuleData.s_rec = lstMarks.SelectedItem.ToString();
        s_rec_arr = lstMarks.SelectedItem.ToString().Split(':');
        ModuleData.s_id = s_rec_arr[0];
        ModuleData.s_mark = s_rec_arr[1];
        this.Hide(); //We hide our Main Form, it's still running at background and waiting to be shown again.We will use it.
        editMark myEditRecordForm = new editMark(); //Edit Form
        myEditRecordForm.Owner = this;  //We set New Edit Form's owner as this mainForm to access its lstMarks(listBox).
        myEditRecordForm.ShowDialog();
    }
}

Форма редактирования Марк

private void btnSubmit_Click(object sender, EventArgs e)
{
    string data = txtStudentID.Text + ":" + txtMark.Text;
    string[] parts = data.Split(':');

    Form1 mainForm = (Form1)this.Owner; //We get our hidden owner's REFERENCE to mainForm object.

    for (int i = 0; i < mainForm.lstMarks.Items.Count; i++) //loops mainForm.lstMarks.Items.Count
    {
        string[] item = mainForm.lstMarks.Items[i].ToString().Split(':'); //We test all of items one by one.
        if (item[0] == ModuleData.s_id) //if listbox's current item's ID part equals to our static ModuleData.s_id
            mainForm.lstMarks.Items[i] = data;  //Set new data.
    }

    mainForm.Show(); //We show our old Main Form which we hided before.
    this.Close();
}

Скриншоты из проекта.

enter image description here

Я выбрал Person3 и нажал кнопку ОБНОВИТЬ

enter image description here

Измененные данные

enter image description here

Нажата кнопка SUBMIT

enter image description here

Обновлены (новые) данные

...