【发布时间】:2016-01-14 15:36:21
【问题描述】:
我希望能够将对象列表传递给子窗体,将其绑定到某些控件,从这些控件编辑列表的属性,然后仅在用户单击时将此修改后的列表传递回父窗体好的。如果用户转义或单击取消,那么我不希望更新原始列表。
好的,所以我从父母那里打开一个子表单,将列表传递给该表单:
List<Names> nameList = new List<Names>();
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
using (Form2 fm2 = new Form2(nameList))
{
fm2.ShowDialog();
if (fm2.NameListProperty != null)
{
nameList = fm2.NameListProperty;
}
}
}
在我的子表单Form2 上,我将列表绑定到 ListBox 和 TextBox:
List<Names> nameList = new List<Names>();
public List<Names> NameListProperty { get; set; }
public Form2(List<Names> nameListPassed)
{
InitializeComponent();
nameList = nameListPassed;
BindingSource bs = new BindingSource();
bs.DataSource = nameList;
listBoxNames.DataSource = bs;
listBoxNames.DisplayMember = "FullName";
txtSurname.DataBindings.Add("Text", bs, "Surname", true, DataSourceUpdateMode.OnPropertyChanged);
}
最后,当用户点击 OK 按钮时,属性设置为修改后的 nameList。如果用户没有单击“确定”,即转义或单击“取消”,则该属性未设置并保持为 null,不应将其分配回父表单 Form1 上的主名称列表。
private void btnOK_Click(object sender, EventArgs e)
{
NameListProperty = nameList;
this.Close();
}
但是,问题是无论用户如何关闭子表单,父表单上的列表都会更新。用于将列表传递回父表单的属性已过时,因为无论如何都会更新父表单上的列表。我想我的问题是如何阻止这种情况发生,以便我可以选择是否将子表单中的更改传递回父表单。
【问题讨论】:
-
嘿。你有没有试过这个。获取对话结果见链接link
-
谢谢,我试过了,但没用。我认为这个问题与链接到父表单或其他东西的数据绑定有关。我对数据绑定不是很熟悉,所以我不确定。父表单中的列表会根据子表单中的更新进行更新。
标签: c# winforms data-binding