Параметр для удаления строки - PullRequest
0 голосов
/ 27 ноября 2010

У меня проблема с моим параметром удаления. Я использую GridView и ObjectDataSource. И я хотел бы удалить одну строку. Но когда я отлаживаю, вижу, что значение CustomerId всегда равно 0 в моем уровне бизнес-логики.

Вот мой код

У меня есть два параметра удаления, Id и CustomerId. Это те же имена, что и в моем 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. Пока ни у одного клиента нет такого идентификатора.

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

        catch (Exception ex)
        {
            throw ex;
        }
    }

Что я делаю не так?

1 Ответ

2 голосов
/ 27 ноября 2010

Включите CustomerID в ваш DataKeyNames

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