2009-05-20 4 views
0

Mon DataGridView est «utile» en mettant à jour automatiquement l'objet sous-jacent dans la source de données lorsqu'une cellule est modifiée. Je veux empêcher cela et faire la mise à jour moi-même (afin que je puisse effectuer la mise à jour de telle manière qu'elle soit enregistrée avec notre gestionnaire d'annulation personnalisé).Empêcher DataGridView de valider automatiquement les modifications sur l'objet lié aux données

J'ai supposé que la façon de procéder consistait à gérer l'événement CellValueChanged, mais l'objet sous-jacent a déjà été mis à jour lorsque le gestionnaire d'événements est appelé.

Existe-t-il un moyen correct d'empêcher le DataGridView de le faire? Peut-être qu'il y a un événement particulier que je peux gérer.

Répondre

2

Cela ne répond pas à votre question direclty, cependant je vous conseillerais probablement de concevoir votre objet de telle sorte qu'il déclenche un événement avant (ou après) que la valeur soit changée, ainsi votre "gestionnaire d'annulation" peut être notifié. De cette façon, votre logique n'est pas liée à la grille. Si, à un moment donné, vous utiliserez cet objet avec autre chose, vous pouvez également en informer les autres sur la valeur en cours de modification. Mon 0,02 $

Exemple de code:

public class SomeClass 
{ 
    private int myInt; 
    public event EventHandler MyIntChanging; 
    public event EventHandler MyIntChanged; 

    protected void OnMyIntChanging() 
    { 
     var handler = this.MyIntChanging; 
     if (handler != null) 
     { 
      this.MyIntChanging(this, new EventArgs()); 
     } 
    } 

    protected void OnMyIntChanged() 
    { 
     var handler = this.MyIntChanged; 
     if (handler != null) 
     { 
      this.MyIntChanged(this, new EventArgs()); 
     } 
    } 

    public int MyInt 
    { 
     get 
     { 
      return this.myInt; 
     } 
     set 
     { 
      if (this.myInt != value) 
      { 
       this.OnMyIntChanging(); 
       this.myInt = value; 
       this.OnMyIntChanged(); 
      } 

     } 
    } 
} 
+0

Au fond, j'avais probablement peur de cette réponse. C'est probablement la bonne façon de faire les choses, mais il est également probable que ce soit beaucoup plus de travail à mettre en œuvre que le hack rapide que j'espérais. Merci quand même. – spatulon

0

Je suis entièrement d'accord avec la suggestion de Bfree. Si vous ne souhaitez pas suivre cette procédure, utilisez l'événement Datagridview.CellValidating qui se produit avant que les données soient écrites sur l'objet sous-jacent et permet même d'annuler l'opération.

Questions connexes