2010-11-27 82 views
0

我的刪除參數有問題。我正在使用一個GridView和一個ObjectDataSource。 我想刪除一行。但是,當我調試時發現CustomerId的值在我的業務邏輯層中始終爲0。刪除一行的參數

這裏是我的代碼

我有兩個刪除參數,IdCustomerId。這些與我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> 

這是隱藏文件

當刪除行的代碼,我分配登錄用戶的刪除參數CustomerId的價值。這一切都有效。我給正確的值給刪除參數。

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(); 
     } 
    } 

通常在我的業務邏輯層,我現在應該得到正確的CustomerId,但我總是得到0。雖然沒有負荷消費有一個ID。

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

     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 

我做錯了什麼?

+0

我撰寫建議設置的實際參數值答案,但出於好奇心,你爲ID獲得什麼價值? – bitxwise 2010-11-27 16:20:08

+0

ID是電影的ID。我在BLL中獲得了正確的電影編號。 – Vinzcent 2010-11-27 16:22:06

回答

2

在包括CustomerIDDataKeyNames

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

之前的更新

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

這樣做或命令

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(); 
    } 
}