2

好的,所以我正在使用 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属性传递给此方法,该方法用作上面SelectParametersControlParameterPropertyName

我需要在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”。

谢谢

4

0 回答 0