编辑子表单后刷新并选择父表单的数据绑定组合框
本文关键字:表单 数据绑定 组合 刷新 编辑 选择 | 更新日期: 2023-09-27 18:31:53
我正在尝试使用新表单中的新信息更新SQL数据绑定组合框。在我进行添加/编辑并保存在弹出表单上后,我想使用新信息刷新组合框并选择当前添加/编辑的项目。目前,下面的代码刷新了列表,但不会像我认为引用变量那样修改父表单上的"myID"。如何最有效地做到这一点?我有大约 20 种表格来做类似类型的事情。
在形式1中
int newid = 0;
private void addToolStripMenuItem1_Click(object sender, EventArgs e)
{
CoalSeamsForm csf = new CoalSeamsForm(ref newid);
csf.ShowDialog();
coalSeamsTableAdapter.Fill(well_Information2DataSet.CoalSeams);
coalSeamsBindingSource.Find("CoalSeamID", newid);
}
在表格 2 中
int myID = 0;
public CoalSeamsForm(ref int myId)
{
this.myID = myId;
InitializeComponent();
}
private void CoalSeamsForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (!isOK)
{
if (DialogResult.Yes == MessageBox.Show("Would you like to save the changes?", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
{
Save();
DataRowView drv = (DataRowView)coalSeamsBindingSource.Current;
myID = (int)drv["CoalSeamID"];
}
}
}
}
这里有一个问题。我什至不知道这段代码是否可以编译。(两个同名的变量?
int myID = 0;
public CoalSeamsForm(ref int myID)
{
this.myID = 0;
InitializeComponent();
}
但是,您的问题是您在表单构造函数中传递 ref myID,然后您的代码退出。当您在Form_Closing中更新 var myID 时,您不再引用在构造函数中传递的 var。要解决您的问题,请声明一个全局属性,例如
public property MyID {get; set;}
然后在构造函数中
public CoalSeamsForm()
{
this.MyID = 0;
InitializeComponent();
}
当用户单击"确认"按钮时更新属性(不在form_closing事件中)
private void ConfirmButton_Click(object sender, EventArgs e)
{
...
this.MyID = (int)drv["CoalSeamID"];
this.DialogResult = DialogResult.OK;
}
最后在调用时使用属性值
using(CoalSeamsForm csf = new CoalSeamsForm())
{
if(DialogResult.OK == csf.ShowDialog())
{
coalSeamsTableAdapter.Fill(well_Information2DataSet.CoalSeams);
coalSeamsBindingSource.Find("CoalSeamID", this.MyID);
}
}
引用参数仅在调用方法/构造函数中工作。一旦它们位于该单个方法之外,它们就会成为第二个对象中的副本。为了实现,根据史蒂夫和其他人的建议,我使用了一个公共属性并从第一个窗体访问它。此外,我在发布的代码中使用了数据绑定组合框,这是我与设置 BindingSource.Position 属性相比更典型的应用程序。
在形式1中
private void addEditCoalSeams(bool isAdd)
{
int? myId=null;
if (!isAdd)
{
myId = (int?)coalSeamsComboBox.SelectedValue;
}
using (CoalSeamsForm csf = new CoalSeamsForm(myId, isAdd))
{
if (DialogResult.OK == csf.ShowDialog())
{
coalSeamsTableAdapter.Fill(well_Information2DataSet.CoalSeams);
coalSeamsComboBox.SelectedValue = csf.coalID;
}
}
}
在煤层形态
public int? coalID {get; set;}
bool isAdd = false;
public CoalSeamsForm(int? coalId, bool isAdd)
{
this.coalID = coalId;
this.isAdd = isAdd;
InitializeComponent();
}
private void okButton_Click(object sender, EventArgs e)
{
Save();
DataRowView drv = (DataRowView)coalSeamsBindingSource.Current;
this.coalID = (int)drv["CoalSeamID"];
this.DialogResult = DialogResult.OK;
}