ObjectDataSource RemoveByID不起作用,DataKeyNames问题?

时间:2013-02-15 22:08:24

标签: c# asp.net gridview objectdatasource

使用ASP.NET/C#/nHibernate体系结构 - 我有一个GridView ObjectDataSource,但是在使用delete方法时遇到了问题。

当我只使用我的服务层中声明的Remove(T entity)函数(然后调用我的nHibernate存储库)时,调用GridView_RowDeleting()方法,然后调用ObjectDataSource_Deleting(),然后调用服务层函数并正确删除业务对象。

但是,当我尝试使用RemoveByID(int ID)函数时,在调用GridView_RowDeleting()ObjectDataSource_Deleting()方法之后,永远不会调用服务层。

我认为这与ObjectDataSource.DeleteParameters有关,但我似乎无法做到正确。

以下是GridView和ObjectDataSource的代码片段。如您所见,我在GridView的pkChapter7ID {<1}}中列出了业务对象的主键DataKeyNames

  <asp:GridView ID="gvChapter7" runat="server" DataSourceID="odsChapter7" DataKeyNames="pkChapter7ID">
    <Columns>
      <asp:BoundField DataField="pkChapter7ID" HeaderText="pkChapter7ID" SortExpression="pkChapter7ID"/>
      ...
    </Columns>
  </asp:GridView>

  <asp:ObjectDataSource ID="odsChapter7" runat="server"
    DeleteMethod="RemoveByID" OldValuesParameterFormatString="original_{0}"
    SelectMethod="FindAllForProjectID" TypeName="CLS.Services.Chapter7Service">
    <DeleteParameters>
      <asp:Parameter Name="ID" Type="Int32" />
    </DeleteParameters>
    <SelectParameters>
      <asp:SessionParameter Name="ID" SessionField="ProjectID" Type="Int32" />
    </SelectParameters>
  </asp:ObjectDataSource>

我的通用服务层的相关部分(调用nHibernate存储库,一旦到达那里工作正常):

    [DataObjectMethod(DataObjectMethodType.Delete, false)]
    public virtual void Remove(T entity)
    {
        _repository.Remove(entity);
    }

    [DataObjectMethod(DataObjectMethodType.Delete, true)]
    public virtual void RemoveByID(int ID)
    {
        T entity = FindBy(ID);
        if (entity != null)
            _repository.Remove(entity);
    }

我尝试在_RowDeleting方法中设置DeleteParameters

protected void gvChapter7_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    odsChapter7.DeleteParameters["ID"].DefaultValue = e.Keys["pkChapter7ID"].ToString();
}

以及在aspx页面中设置ObjectDataSource控件参数的多种方法,例如:

<DeleteParameters>
  <asp:ControlParameter ControlID="gvChapter7" Name="ID" PropertyName="SelectedDataKey" Type="Int32" />
</DeleteParameters>

有人能看到我错过的东西吗?

0 个答案:

没有答案