Saltar al contenido

¿Cómo saber si el usuario ha modificado datos usando bindingsource?

Después de investigar en diversos repositorios y páginas de internet al final nos encontramos con la respuesta que te enseñamos a continuación.

Solución:

Si su objeto dentro de la Lista admite el INotifyPropertyChanged evento y reemplazas el List por un BindingList puedes suscribirte a la ListChanged evento de BindingList para informarse sobre cualquier cambio realizado por el usuario.

Si está vinculado a un conjunto de datos, tiene suerte: tiene una propiedad HasChanges. Puede obtener los cambios reales llamando a GetChanges en el conjunto de datos. Esto devuelve un nuevo conjunto de datos que contiene una copia de todas las filas modificadas

Después de probar cosas diferentes, terminé con este fragmento de código:

private MyClass currentItem = null;
private bool itemDirty = false; // can be used for "do you want to save?"

private void bindingSource_CurrentChanged(object sender, EventArgs e)

    var handler = new PropertyChangedEventHandler((s, e2) => itemDirty = true);

    var crnt = currentItem as INotifyPropertyChanged;
    if(crnt != null) crnt.PropertyChanged -= handler;

    currentItem = (MyClass)bindingSource.Current;

    crnt = currentItem as INotifyPropertyChanged;
    if(crnt != null) crnt.PropertyChanged += handler;

    itemDirty = false;

Funciona bien para mí, aunque guardo mucha información de estado en los campos de instancia de Windows Forms. Sin embargo, jugando con CurrentChanged y CurrentItemChanged no me ayudó

valoraciones y comentarios

Recuerda que puedes permitirte valorar esta crónica si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *