2013-06-04 4 views
0

J'essaie de comprendre la différence entre RowChanging et Rowchanged événement de datatable. J'ai vérifié le blog de MSDN mais n'ai pas pu trouver n'importe quelle différence pratique.Quelle est la différence entre DatatableRowchanging Event et DataTableRowChanged Event

Voici ce que je suis:

  1. deux Utiliser la même Datarowchangeeventargs: Ils ont même ensemble de données d'événement. à savoir; e.Action et e.row.

Dans la fenêtre de surveillance j'ai vérifié s'il y avait des changements à ces données d'événement mais elles étaient similaires. S'il y aurait eu Annuler dans RowChanging alors cela aurait signifié à propos de la validation.

Donc dans l'ensemble, je suis confus pourquoi les deux événements si elles signifient la même chose.

Veuillez effacer ma confusion.

Voici ma différence que j'ai trouvée en fonction des pointeurs que j'ai obtenus des réponses.

J'ai ajouté quelques lignes à la colonne et j'ai appelé les deux événements. J'ai essayé de faire e.Row.RejectChanges() sur les deux changeant et changé l'événement c'est quand j'ai réalisé que e.Row est réellement la rangée proposée. alors Rejectchanges me donnait l'erreur "Can not Canceledit() dans l'événement rowchanging". Mais il autorisait le rejet dans l'événement RowChanged. donc la séquence suivante s'est produite: 1.RowChangingEvent e.Action = Ajouté (comme j'ajoutais plusieurs lignes à la table) e.Row.RowState = Détaché. 2. RowChanged événement e.Action = Ajouté e.Row.RowState = Ajouté (en rouge comme il a été changé ici et ajouté à datatable)

Quant à l'exception: j'ai reçu « ne peut pas appeler CancelEdit() dans l'événement rowchanging "

In rowChanged J'ai reçu" Cette ligne a été supprimée d'une table et ne contient aucune donnée. BeginEdit() va permettre la création de nouvelles données dans cette ligne. "

Veuillez me guider avec l'exception Event Event modifiée.

Répondre

1

L'événement RowChanged se produit après un DataRow a été modifié avec succès. L'événement RowChanging se produit pendant le changement du DataRow.

Cela vous donnera l'opportunité d'exécuter du code avant que la ligne elle-même ne soit modifiée.

+0

Les deux se produisent l'un après l'autre des thats vrai, mais les deux ont les mêmes données d'événement. Ma question est quelle est l'utilisation de deux événements quand vous pouvez faire la même chose avec un. Donc, vous pouvez exécuter du code dans les deux et faire n'importe quelle exécution et les deux seront identiques. – user2432715

+0

Peut-être dans le contexte que vous en pensez, votre demande sera la même. Cependant, vous pouvez lancer une exception dans l'événement RowChanging, ce qui empêcherait l'événement RowChanged de se déclencher (vous effectuez peut-être une sorte de validation). Si la validation réussit, vous pouvez utiliser l'événement RowChanged pour faire ce dont vous avez besoin, sinon lancer une exception. Tout dépend de ce que vous voulez faire quand la rangée est changée. Ils peuvent tous deux être utilisés pour faire les mêmes choses dans certains cas. – Vahlkron

+0

En règle générale, de nombreux objets du CLR incluront ces paires d'événements pour lesquelles un événement est prévu avant que l'objet ne soit modifié, et l'autre événement pour après. Le passé/présent de la commande devrait vous aider à comprendre cela. – mason

1

Selon MSDN:

DataTable.RowChanging événement se produit lorsqu'un DataRow est en train de changer.

tout

DataTable.RowChanged événement se produit après une DataRow a été modifié avec succès.

Si vous rejetez une exception dans un événement de modification, vous pouvez annuler les modifications. Changé événements que vous pouvez utiliser pour apporter des modifications dans d'autres tables, mais vous ne pouvez pas (en mode simple ) démissionner.

Oui, il True qui contiennent tous deux les mêmes données d'événement, c'est-à-dire e.Action et e.Row; mais il est plus important que les opérations que vous voulez faire à quel moment.

Signifie OnChanging événement les données ne sont pas encore validées. Donc, si vous faites un changement de code à ce stade, les données peuvent ne pas persister si la validation échoue. Alors que dans OnChanged événement, vous pouvez changer le code selon vos besoins.

+0

L'événement Onchanging n'est pas validé, alors comment pouvons-nous fausser la validation. car il n'a pas e.Cancel comment le faisons-nous? – user2432715

+0

Vous pouvez utiliser e.Row.AcceptChanges() AND e.Row.RejectChanges() à cette fin. –

+0

Merci de me permettre d'utiliser Accepter et rejeter les modifications qui m'ont définitivement aidé à trouver la différence. – user2432715

0

De MSDN:

RowChanging: Survient lorsqu'un changement a été soumis à une valeur DataColumn ou RowState d'un DataRow dans le DataTable.

RowChanged: Se produit après la modification réussie d'une valeur DataColumn ou du RowState d'un DataRow dans le DataTable. Dans ce cas, nous pouvons dire à l'application qui va faire ..

(example here)

Questions connexes