将参数添加到ObjectDataSource的UpdateMethod

时间:2013-10-09 11:02:43

标签: c# asp.net listview webforms objectdatasource

好的,所以我正在使用ASP WebForms并在另一个ListView(用于帐户)中有一个ListView(用于帐户客户)。

此内部ListView具有帐户客户的ObjectDataSource(在此特定应用程序中称为参与者)。

这是:

<asp:ObjectDataSource ID="dataSourceParticipants" runat="server" 
SelectMethod="GetParticipantsForAccount"
UpdateMethod="UpdateParticipantDetails"
DeleteMethod="DeleteParticipantDetails"
InsertMethod="InsertParticipantDetails"
TypeName="PreScreening2.AccountManagerWrapper"
DataObjectTypeName="PreScreening2.BLL.Models.Participant">
    <SelectParameters>
        <asp:ControlParameter ControlID="grdAccounts" Name="accountNumber" PropertyName="SelectedDataKey.Values[AccountNumber]"
            Type="String" />
    </SelectParameters>
</asp:ObjectDataSource>

这是我的AccountManagerWrapper类(命名不佳):

public class AccountManagerWrapper
{
    [Inject]
    public IAccountManager AccountManager { get; set; }

    [Inject]
    public IParticipantManager ParticipantManager { get; set; }

    public IEnumerable<Participant> GetParticipantsForAccount(string accountNumber)
    {
        return AccountManager.GetParticipantsForAccount(accountNumber);
    }

    public bool UpdateParticipantDetails(Participant participant)
    {
        return ParticipantManager.UpdateParticipantDetails(participant, null, AccountManager);
    }

    public bool DeleteParticipantDetails(Participant participant)
    {
        return ParticipantManager.DeleteParticipant(participant, null, AccountManager);
    }

    public bool InsertParticipantDetails(Participant participant)
    {
        return ParticipantManager.UpdateParticipantDetails(participant, null, AccountManager);
    }
}

在我的外部ListView的 ItemDataBound 事件中,我这样做:

protected void grdAccounts_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        var dataItem = e.Item as ListViewDataItem;
        if (dataItem != null)
        {
            var parentID = ((BLL.Models.Account)dataItem.DataItem).AccountNumber;

            var sqlParts = (ObjectDataSource)e.Item.FindControl("dataSourceParticipants");

            if (sqlParts != null)
            {
                var parameterParentID = sqlParts.SelectParameters[0];
                parameterParentID.DefaultValue = parentID;
            }
        }
    }
}

这非常有效,重要的是要澄清这一行以上的所有内容都能100%运行,所有方法都完全符合我的要求。

我想更新我的 UpdateParticipantDetails 方法,如下所示:

    public bool UpdateParticipantDetails(Participant participant, string accountNumber)
    {
        return ParticipantManager.UpdateParticipantDetails(participant, accountNumber, AccountManager);
    }

我想将相同的 AccountNumber 属性传递给此方法,我将其用作 SelectParameters中 ControlParameter PropertyName 上面。

我需要在 dataSourceParticipants 的HTML中添加什么才能将此新值传递给我的Update方法?

我试过这个:

<UpdateParameters>
    <asp:ControlParameter ControlID="grdAccounts" Name="participant"/>
    <asp:ControlParameter ControlID="grdAccounts" Name="accountNumber" PropertyName="SelectedDataKey.Values[AccountNumber]" Type="String"/>
</UpdateParameters>

Resharper给了我这个错误:

  

参数数量不正确

当我尝试更新时,我收到以下执行时间错误:

  

ObjectDataSource'DataSourceParticipants'找不到带有'PreScreening2.BLL.Models.Participant'类型参数的非泛型方法'UpdateParticipantDetails'。

由于

0 个答案:

没有答案