2010-08-27 7 views
7

Ceci est une question WinForms C#.Comment surveiller chaque fois qu'une valeur de cellule est modifiée dans DataGridView?

J'ai un contrôle DataGridView personnalisé hérité de la classe DataGridView standard. Je veux surveiller le cas chaque fois qu'une cellule est ajoutée à la grille, une valeur de cellule est modifiée dans la grille. Je n'ai aucune idée comment faire ça.

L'événement DataBindingCompleted est sans secours au niveau cellule/ligne/colonne. L'événement CellValueChanged est source de confusion car il n'est déclenché que lorsque l'utilisateur modifie une valeur à partir de l'interface utilisateur et est sans ressource si la valeur est mise à jour à partir de la source de données sous-jacente. Quel est l'événement approprié à écouter?

Je sais que la classe DataGridViewCell a un événement ValueChanging. Mais dans le DataGridView personnalisé, comment puis-je connecter mon écouteur d'événement à chaque cellule?

Merci pour l'aide.

Répondre

-1

Dans votre contrôle personnalisé, vous avez besoin d'une variable d'événement mondial:

public event EventHandler CustomCellValueChanged; 

vous devez définir l'événement changé cellule avec ceci:

private void gvGridView_CellValueChanged(object sender, EventArgs e) 
    { 
     EventHandler Handler = CustomCellValueChanged; 
     if (Handler != null) { Handler(this, e); }; 
    } 

Ensuite, dans votre formulaire, vous serez en mesure Pour vérifier l'événement CustomCellValueChanged

+1

Cela ne résout pas le problème original. Il crée une copie redondante de CellValueChanged qui ne sert à rien, puisque la sous-classe fournira toujours l'accès à l'événement original. Il ne se déclenche pas lorsque les cellules sont ajoutées à la grille, comme l'auteur de la question spécifié. –

+0

D'accord avec Bradley. Mais encore merci pour l'effort. – Steve

+0

Ah désolé, lisez mal la question. Ma faute. – Wildhorn

1

1, Vous pouvez hériter de DataGridView lors de la personnalisation de DataGridView.Si vous héritez de UserControl pour personnaliser DataGridView, vous ne pouvez pas obtenir directement CellValueC événement suspendu lors de la génération de DataGridView personnalisé dans un autre projet ou application.

2, Pour faire quelque chose dans CellValueChanged.

3, Hériter de l'implémentation DataGridView.

(1) Créer UserControl.Name est DataGridViewEx.

(2) Modifier l'héritage. public partial class DataGridViewEx : UserControl ==>public partial class DataGridViewEx :DataGridView

(3) DataGridViewEx.Designer.cs ouvertes et protéger //this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; .La phrase est dans la méthode InitializeComponent().

Questions connexes