从单独表单上的列表框编辑记录
editing record from a list box on a separate form
在我的程序中,我允许用户从列表框中select 一条学生记录,当他们点击编辑按钮时,一个新的表单会打开。此表格显示他们 select 教过的学生的 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;
}
}
我只写了我 changed.Other 部分与 yours.And 相同的部分代码,因为你希望没有 linq。
首先将 listBox 的修饰符 属性 设置为 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();
}
}
表单编辑标记
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();
}
项目截图。
我选择了 Person3 并单击了“更新”按钮
更改数据
点击提交按钮
更新(新)数据
在我的程序中,我允许用户从列表框中select 一条学生记录,当他们点击编辑按钮时,一个新的表单会打开。此表格显示他们 select 教过的学生的 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;
}
}
我只写了我 changed.Other 部分与 yours.And 相同的部分代码,因为你希望没有 linq。
首先将 listBox 的修饰符 属性 设置为 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();
}
}
表单编辑标记
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();
}
项目截图。
我选择了 Person3 并单击了“更新”按钮
更改数据
点击提交按钮
更新(新)数据