Сохранение объекта изменяется с дочерней формы на родительскую форму на основе нажатия кнопки - PullRequest
0 голосов
/ 18 марта 2010

Я создал форму, которая используется для добавления и редактирования пользовательского объекта.Какой режим принимает форма, обеспечивается значением перечисления, переданным из вызывающего кода.Я также передаю объект пользовательского типа.Все мои элементы управления в данных привязаны к конкретным свойствам пользовательского объекта.Когда форма находится в режиме добавления, это прекрасно работает, так как когда элементы управления обновляются с данными, базовый объект также.Однако в режиме редактирования я сохраняю две переменные пользовательского объекта, предоставляемые вызывающим кодом, оригинал и временную переменную, создаваемую путем глубокого копирования.Затем элементы управления привязываются к временной копии, что позволяет легко отменить изменения, если пользователь нажмет кнопку «Отмена».Что я хочу знать, так это как сохранить эти изменения обратно в исходный объект, если пользователь нажимает кнопку ОК, так как теперь происходит отключение из-за глубокого копирования.Я пытаюсь избежать реализации внутреннего свойства в форме добавления / редактирования, если могу.Ниже приведен пример моего кода:


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 голосов
/ 18 марта 2010

Вы всегда можете добавить функцию к своему объекту (клиенту), например, «Копировать (клиентская копия)» или «Обновить (клиентская копия)» и использовать эти изменения таким образом.

Другим способом было бы иметь класс-оболочку вокруг Customer EditableCustomer, который принимает объект customer в своем конструкторе EditableCustomer (корень клиента) и использует его для хранения изменений. В последнем случае просто вызовите функцию, например «UpdateRoot ()», и внесите изменения обратно первоначальному клиенту, в противном случае вызов будет аналогичен сбросу.

Вы не сможете напрямую использовать глубокие копии, но это позволит вам контролировать ситуацию такого типа и фактически позволит вам динамически контролировать как правки, так и отмены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...