从单独表单上的列表框中编辑记录

问题描述 投票:0回答:1

在我的程序中,我允许用户从列表框中选择学生记录,当他们点击编辑按钮时,将打开一个新表单。此表单显示他们选择的学生的ID和标记。我需要让用户编辑该标记并更新列表框。我在让用户编辑时遇到问题,并对此提出任何建议表示感谢。 (当我在编辑表单中有用户数据时,我无法弄清楚要做什么)谢谢。

我不被允许使用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;
    }
}
c# forms editing
1个回答
0
投票

我只写了我改变的代码部分。其他部分与你的相同。并且你希望没有linq。

enter image description here

首先将listBox的Modifiers属性设置为Public,以便从另一个表单访问它。

现在我们来看看代码。

Form1中

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();
    }
}

表格editMark

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并点击了UPDATE按钮

enter image description here

更改了数据

enter image description here

单击“提交”按钮

enter image description here

更新(新)数据

© www.soinside.com 2019 - 2024. All rights reserved.