根据按下按钮将对象从子表单更改为父表单

时间:2010-03-17 21:12:52

标签: c# .net forms

我创建了一个用于添加和编辑自定义对象的表单。表单采用的模式由从调用代码传递的枚举值提供。我还传入了自定义类型的对象。我对数据的所有控件都绑定到自定义对象的特定属性。当表单处于“添加”模式时,这非常有效,因为当使用数据更新控件时,底层对象也是如此。但是,在编辑模式下,我保留了调用代码提供的自定义对象的两个变量,原始代码和通过深度复制生成的临时代码。然后将控件绑定到临时副本,这样,如果用户单击“取消”按钮,则可以轻松地放弃更改。我想知道的是,如果用户单击“确定”按钮,如何将这些更改保留回原始对象,因为现在由于深度复制而断开连接。我试图避免在添加/编辑表单上实现内部属性,如果可以的话。以下是我的代码示例:


public AddEditCustomerDialog(Customer customer, DialogMode mode)
{
   InitializeComponent();
   InitializeCustomer(customer, mode);
}
private void InitializeCustomer(Customer customer, DialogMode mode)
{
   this.customer = customer;
   if (mode == DialogMode.Edit)
   {
      this.Text = "Edit Customer";
      this.tempCustomer = ObjectCopyHelper.DeepCopy(this.customer);
      this.customerListBindingSource.DataSource = this.tempCustomer;
      this.phoneListBindingSource.DataSource = this.tempCustomer.PhoneList;
   }
   else
   {
      this.customerListBindingSource.DataSource = this.customer;
      this.phoneListBindingSource.DataSource = this.customer.PhoneList;
   }
}

1 个答案:

答案 0 :(得分:0)

您可以随时向对象(客户)添加一个函数,作为“复制(客户托管)”或“更新(客户托管)”并以此方式使用这些更改。

另一种方法是在Customer EditableCustomer周围设置一个包装类,它在其构造函数EditableCustomer(Customer root)中获取客户对象,并使用它来保存更改。在最后一个事件中,只需调用类似“UpdateRoot()”的函数并将更改填充回原始客户,如果没有调用,则将与丢弃相同。

您无法直接使用深层拷贝,但这将允许您控制此类情况,实际上允许您动态控制编辑和撤消。