2009-05-12 3 views
0

J'ai créé un contrôle Gridview qui extrait des données de ma base de données, mais n'affiche pas toutes les informations que j'espère y trouver. Je choisis de ne pas afficher la clé primaire à des fins d'interface utilisateur, mais exige cette clé pour les opérations de base sur la grille.Extraction d'informations de base de données à partir de gridviews qui n'apparaissent pas dans la grille

Je suis en train d'essayer d'ajouter une option "Supprimer" à la table, mais malheureusement je n'ai pas beaucoup de chance. Voici mon fichier .aspx.

<asp:GridView ID="ManagerList_GV" runat="server" 
       AutoGenerateColumns="False" AllowSorting="True" 
       DataKeyNames = "ManagerID" OnRowEditing="editManager" 
       OnRowDataBound="FormatManagers" CellPadding="3" > 
       <Columns> 
        <asp:BoundField HeaderText="Manager" DataField="FullName" /> 
        <asp:BoundField HeaderText="Status" DataField="Status" /> 
        <asp:CommandField EditText="Edit" ShowEditButton="True" /> 
        <asp:TemplateField> 
         <ItemTemplate> 
          <asp:LinkButton Text="Delete" runat="server" CommandName="deleteRow" /> 
         </ItemTemplate> 
        </asp:TemplateField>    
       </Columns> 
      </asp:GridView> 

Malheureusement, je ne sais pas quoi faire pour mon back-end. J'ai créé ma procédure stockée et ma sous-routine de couche de gestion, mais je ne sais pas comment a) tirer sur quelle ligne a été cliquée, puis b) accéder à la clé primaire par rapport à cette ligne, puisque je ne l'affiche pas (la clé primaire est ManagerID).

Merci d'avance pour votre aide :)

Répondre

4

Je voudrais créer un champ de bouton, mais je pense qu'un champ de modèle devrait fonctionner aussi bien:

<asp:ButtonField ButtonType="Link" Text="Delete" CommandName="Delete" /> 

alors vous voulez gérer la RowDeleting cas de Gridview:

Private Sub GridView1_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles Gridview1.RowDeleting 
    Dim ManagerIdToDelete As Int32 = CType(CType(sender, GridView).DataKeys(e.RowIndex).Value, Int32) 
    'Now call your delete command with the id 
End Sub 
+0

Est-ce que GridViewName_RowDeleting est appelé automatiquement par asp.net sur cet événement? En outre, avoir CommandName = "Supprimer" ne causerait pas de problèmes, puisque "Supprimer" est également intégré au système? Ou est-ce que le CommandName de cette manière déclenche cette fonction? –

+0

L'ajout de CommandName = Delete est ce qui déclenche l'événement RowDeleting intégré à ASP.Net. – brendan

+0

Génial, merci :) –

0

Ajouter un ColonneLiée afficher la clé primaire comme visible sur la vue de la conception, mais après la colonne databinding faire avec le jeu de PK visible faux.

par exemple.

<Columns>      
     <asp:BoundField HeaderText="PrimaryKey" DataField="ManagerID" /> 
     <asp:BoundField HeaderText="Manager" DataField="FullName" />          
    ....          
</Columns> 

côté serveur:

ManagerList_GV.DataSource = ??; 
ManagerList_GV.DataBind(); 
ManagerList_GV.Columns[0].Visible = false; 

Ce fut délibérée afin que le PK ne sont pas stockées dans ViewState pour des raisons de sécurité. Vous pouvez ensuite ajouter un événement RowDeleting et accéder à la clé primaire à l'aide

ManagerList_GV.Rows[e.RowIndex].Cells[0].Text; 
+0

Intéressant .. Est-ce que ces commandes complètes dans le sous-programme généré par le studio visuel, ManagerList_GV_RowCommand (expéditeur de ByVal comme objet, ByVal e comme GridViewCommandEventArgs) Han dles ManagerList_GV.RowCommand? Ou est-ce que je fais des choses dans le mauvais sous-programme? Il semble que e.RowIndex est null maintenant –

+0

Définir CommandName de LinkButton pour supprimer et l'événement est appelé RowDeleting – Fermin

Questions connexes