2008-10-15 5 views
1

Je suis en train d'écrire un frontal prototype simple en utilisant un GridView qui est rempli via la fonction, plutôt que d'être lié directement à une source de données SqlServer.Comment supprimer une ligne d'un GridView en utilisant des données non visibles?

Je peux supprimer une ligne/enregistrement de grille/base de données sous-jacente Je suis actuellement

  1. Réglage de la AutoGenerateDeleteButton = true
  2. Affichage des ids d'enregistrement dans la première colonne
  3. Manipulation de l'événement RowDeleting
  4. obtention de l'identifiant en obtenant les grid.Rows [e.RowIndex] .Cells [idIndex] .Text
  5. passant par ce nombre à une fonction qui effectue la suppression

Cela semble fonctionner très bien, mais je préfère ne pas afficher les identifiants aux utilisateurs, car ils ne signifient rien pour eux.

J'ai essayé de définir la propriété Visible de la colonne id sur false, mais cela a provoqué l'étape 4 ci-dessus pour retourner une chaîne vide - et donc aucun enregistrement supprimé.

Alors, comment puis-je stocker le numéro d'id caché avec chaque ligne? Ou est-ce que je vais tout à fait dans le mauvais sens?

Suivre jusqu'à réponses: la manière

Merci pour les deux de DataKeyNames des réponses, a fini par aller Eric. Pour d'autres nouvelles à ASP.NET comme je suis, les étapes que j'utilise où

  • Entre les lignes où je mets la DataSource de grilles et appelai DataBind(), j'ajouté

    grid.DataKeyNames = new string[] {"id"};

  • Ensuite, dans la fonction de gestion du RowDeleting je me suis prise de mon id en utilisant

    grid.DataKeys[e.RowIndex].Value

Répondre

3

GridView a une propriété DataKeyNames. Lorsque vous liez une source de données à la grille, vous définissez les DataKeyNames (généralement avec un seul nom, votre champ PK). Vous ne montrez pas le PK, mais vous pouvez y accéder à partir du code-behind.

+0

Oui, DataKeys est le chemin à parcourir. – Kon

0

Visible = false signifie ne pas afficher sur la page. Ce que vous voulez, c'est soit en faire un champ modèle et utiliser un HiddenField pour contenir la valeur ou définir le style sur le contrôle à "display: none;". Ce serait le cas si le code côté client avait besoin d'accéder à la valeur pour un appel Ajax ou quelque chose.

Sinon, utilisez la propriété DataKeyNames comme indiqué par @Eric Z Beard.