GridView RowUpdating SqlDataSource.Mise à jour à partir du Code-behind
Donc je vais avoir un problème de faire une mise à jour dans un Gridview lors d'une OnRowUpdating événement.
Ce que je suis en train de faire est de définir la UpdateCommand dans un SqlDataSource puis mise à jour à l'aide de cette commande. L'événement est tir d'accord, mais lorsque l'événement est fait, il apparaît que la ligne ne jamais mises à jour.
C#:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
SqlDataSource1.UpdateCommand = "UPDATE A_Table SET Something = @AValue WHERE ID = " + e.RowIndex;
SqlDataSource1.Update();
}
Edit: Re-écrit mon exemple de commande de mise à jour...c'est vraiment une commande de mise à jour, pas une commande select haha.
- Vous ne devriez pas avoir à faire quoi que ce soit dans le
RowUpdating
cas si vous avez laDataKeyNames
mis en place pour laGridView
(et vous avez leUpdateCommand
définis dans leSQLDataSource1
balisage). L'appel de laUpdate()
méthode ici serait la cause de laUPDATE
à se produire deux fois. - est droit; si vous avez la
DataKeyNames
mis en place, l'appel deUpdate()
de laRowUpdating
gestionnaire sera la cause d'une StackOverflowExeption!
Vous devez vous connecter pour publier un commentaire.
Les autres réponses ici sont TRÈS correctes en pointant la question avec votre
UpdateCommand
.Comme je l'ai mentionné dans le commentaire plus haut, je me contenterai de souligner que c'est un peu plus facile que ce que vous avez là. Lors de l'utilisation d'un
GridView
avec unSQLDataSource
, beaucoup de travail est fait pour vous aussi longtemps que vous avez configuré correctement.Tout d'abord, définir votre
UpdateCommand
dans le balisage de laSQLDataSource
, comme ceci:(
ColPK
serait la clé primaire de la table que vous êtes à la mise à jour)Ensuite, vous pouvez définir "AutoGenerateEditButton" à true dans votre GridView balisage et, pouf! Vous pouvez mettre à jour le
GridView
(sans avoir rien à faire dans le code behind).Maintenant, vous pouvez toujours gérer la
OnRowUpdating
événement dans votre code si vous avez besoin de faire un traitement supplémentaire, ou d'annuler laUpdate
basé sur la logique, etc. Mais la mise à Jour de base de la fonctionnalité est presque gratuit!Votre UpdateCommand est censé être une
UPDATE
de commande, pas unSELECT
commande.Modifier cette ligne pour quelque chose de plus près à ceci:
Voir ce lien msdn pour plus d'informations sur la façon d'utiliser le UpdateCommand:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.updatecommand.aspx
Tout d'abord,
UpdateCommand
shouln'pas être commeUPDATE A_Table SET ID = .. WHERE ...
?Je pense que vous manque quelque chose. Lire Insertion /mise à Jour Modifier Supprimer l'enregistrement dans GridView. C'est un grand article pour vous.
EDIT: Comme Kiley dire: Essayez
SqlDataSource1.UpdateCommand = "UPDATE A_Table SET Something = @Something WHERE ID = " + e.RowIndex;