2010-11-27 27 views
0

J'ai un problème avec mon paramètre de suppression. J'utilise un GridView et un ObjectDataSource. Et je voudrais supprimer une ligne. Mais quand je débogue, je vois que la valeur de CustomerId est toujours 0 dans ma couche logique métier.Paramètre pour la suppression d'une ligne

Voici mon code

J'ai deux paramètres de suppression, Id et CustomerId. Ce sont les mêmes noms que ceux de ma BLL.

<asp:GridView DataKeyNames="Id" ID="gvFavoriteMovies" DataSourceID="odsFavoriteMovies" AutoGenerateColumns="False" 
    runat="server"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate>    
        <asp:Label ID="lblTitel" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Title")%>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 

     <asp:CommandField ShowDeleteButton="True" /> 

    </Columns> 
</asp:GridView> 

<asp:ObjectDataSource ID="odsFavoriteFilm" runat="server" 
TypeName="MovieMonstrDataLayer.bll.BLLMovies" 
SelectMethod="GetFavoriteMoviesFromUser" 
DeleteMethod="DeleteFavoriteMoviesFromUser" 
onobjectcreating="odsFavoriteFilm_ObjectCreating" 
    ondeleting="odsFavoriteFilm_Deleting"> 
    <DeleteParameters> 
     <asp:Parameter Name="Id" DbType="Int32" Direction="Input" /> 
     <asp:Parameter Name="CustomerId" DbType="Int32" Direction="Input" /> 
    </DeleteParameters> 
    <SelectParameters> 
     <asp:Parameter DbType="Int32" Direction="Input" Name="CustomerId" /> 
    </SelectParameters> 
</asp:ObjectDataSource> 

Ceci est dans le code derrière le fichier

Lors de la suppression d'une ligne, j'assignez la valeur du client connecté au paramètre CustomerId Supprimer. Tout cela fonctionne. Je donne la bonne valeur au paramètre delete.

protected void odsFavoriteFilm_Deleting(object sender, ObjectDataSourceMethodEventArgs e) 
{ 
     if (Context.User.Identity.IsAuthenticated) 
     { 
      this.odsFavoriteFilm.DeleteParameters["CustomerId"].DefaultValue = ((MovieMonstrIdentity)Context.User.Identity).Customer.Id.ToString(); 
      this.odsFavoriteFilm.DataBind(); 
     } 
    } 

Normalement dans ma couche logique métier, je devrais maintenant le CustomerId droit, mais je suis toujours 0. Bien qu'aucun Costumer n'a qu'une pièce d'identité.

public int DeleteFavoriteFilmFromUser(int Id, int CustomerId) 
    { 
     try 
     { 
      return Adapter.DeleteFavoriteFilmFromUser(Id, CustomerId); 
     } 

     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 

Qu'est-ce que je fais mal?

+0

Je compose un projet répondre, mais par curiosité, quelle valeur obtenez-vous pour l'identification? – bitxwise

+0

ID est l'ID du film. Je reçois le bon ID du film dans mon BLL. – Vinzcent

Répondre

2

Inclure CustomerID dans votre DataKeyNames

<asp:GridView DataKeyNames="Id,CustomerId" ...> 

Ou faire avant la mise à jour

protected odsFavoriteFilm_DataBinding(object sender, EventArgs e) { 
    if(!IsPostBack) { 
     this.odsFavoriteFilm.DeleteParameters["CustomerId"].DefaultValue = ((MovieMonstrIdentity)Context.User.Identity).Customer.Id.ToString(); 
    } 
} 

ou de définir la valeur du paramètre réel pour la commande

protected void odsFavoriteFilm_Deleting(object sender, ObjectDataSourceMethodEventArgs e) { 
    if (Context.User.Identity.IsAuthenticated) { 
     e.Command.Parameters["CustomerId"].Value = ((MovieMonstrIdentity)Context.User.Identity).Customer.Id.ToString(); 
    } 
} 
+0

Merci. J'ai utilisé la deuxième solution et cela fonctionne. Je l'ai fait un peu différent. Il n'y avait pas e.command.paramaters, mais est utilisé e.InputParameters.Add(). – Vinzcent