2010-03-11 28 views
5

¿Cómo se supone que el enlace de datos en C# WinForms funciona cuando tiene un botón Guardar? ¡No quiero que se actualicen los datos hasta que presione Guardar!WinForms enlace de datos con un botón Guardar?

Tengo dos formularios (lista y detalle) respaldados por una colección BindingList<T> y mi objeto personalizado de esa colección, respectivamente. Puedo vincular cada formulario a la lista u objeto de manera apropiada. Sin embargo, cualquier cambio realizado en el formulario de detalles se refleja inmediatamente en el formulario de la lista; no deseo guardar los cambios y actualizar los detalles que se muestran en la lista hasta que se presione el botón Guardar.

¿Está diseñado el enlace de datos para soportar esto? ¿Hay un patrón común para hacerlo?

De cualquier modo que lo mire, el enlace no parece ser capaz de soportar este escenario. He pensado en lo siguiente:

  • Pasar un clon del objeto al formulario de detalles, pero luego tengo que reconciliar los cambios en Guardar - se hayan realizado cambios en la copia de la lista en el ínterin .

  • La implementación IEditableObject y llamando EndEdit de ahorrar casi funciona como puedo evitar que la lista se notifica de los cambios realizados hasta que se pulse Guardar, pero si algo provoca una actualización de la lista se actualiza con los datos provisionales.

Actualmente estoy dejando de prescindir del enlace de datos en mi vista detallada, y hacerlo todo de forma manual. Lo cual es bastante molesto

Respuesta

4

El enlace de datos realmente no fue diseñado para este tipo de cosas, desafortunadamente.

La mejor solución que hemos encontrado aquí es editar clones de objetos, luego conciliar los cambios, como mencionaste. Es posible que desee crear una interfaz personalizada de colección y/o objeto que lo ayude a gestionar este tipo de cosas.

Incluso si el método de clonación es un poco más de trabajo por adelantado, va a ser mucho menos complicado y frustrante que usar IEditableObject tratando de atrapar todos los eventos posibles que actualizan los datos. No solo eso, es un enfoque más directo, y no terminarás con el código de spaghetti.

0

Si está usando una lista de enlaces, su mejor opción sería implementar IBindingList para crear la funcionalidad que desee. También es posible realizar esto simplemente heredando BindingList y anulando los métodos apropiados para cambiar el comportamiento de la lista de enlaces.

http://msdn.microsoft.com/en-us/library/system.componentmodel.ibindinglist.aspx

Si no se fijan en el uso de una lista de unión, que es probablemente el mejor para hacer las manipulaciones de datos basados ​​manualmente fuera de los eventos del control.

Lo mejor de la suerte.

Cuestiones relacionadas