【问题标题】:FormView not providing OldValues to its SqlDataSource on UpdateFormView 在更新时未向其 SqlDataSource 提供 OldValues
【发布时间】:2012-07-12 05:18:50
【问题描述】:

我一直在寻找这个解决方案 4 天 -- 帮助我 stackoverflow.. 你是我唯一的希望。

我正在使用 FormView 来编辑大表的行。 FormView 的 DataSource 是使用 DataSourceId 属性指定的。

SqlDataSource 指定了 OldValuesParameterFormatString,并将 ConflictDetection 设置为“CompareAllValues”。

我的问题是 FormView 没有设置 OldValues,因此在 Update 命令期间不会发生 CompareAllValues。

我搜索了互联网并遇到了一些建议,但都没有解决问题。我希望有人知道为什么没有设置 OldValues。

这是(简化的)代码:

<asp:FormView ID="FormViewPlanAgain" runat="server" DataSourceID="SqlPlanSourceAgain"     DataKeyNames="PlansRID">
    <ItemTemplate>
        <%# Eval("PlanName") %>
    </ItemTemplate>
    <EditItemTemplate>
        <dx:ASPxTextBox id="ASPxTextBox36" runat="server" CssClass="floatLeft veryLarge" Text='<%# Bind("PlanName") %>' />
        <asp:Button ID="btnUpdate" runat="Server" CommandName="Update" Text="Update" />
        <asp:Button ID="btnCancel" runat="Server" CommandName="Cancel" Text="Cancel" />
    </EditItemTemplate>
</asp:FormView>

<asp:SqlDataSource ID="SqlPlanSourceAgain" runat="server" OldValuesParameterFormatString="original_{0}" ConflictDetection="CompareAllValues"
            ConnectionString="<%$ ConnectionStrings:cpaConnectionString %>" 
            SelectCommand="Select * FROM Plans WHERE Plans.PlansRID = @PlansRID" SelectCommandType="Text"
            UpdateCommand="Plans_Update" UpdateCommandType="StoredProcedure" OnSelecting="SqlPlanSource_Selecting">
            <SelectParameters>
                <asp:Parameter DefaultValue="0" Name="PlansRID" Type="Int32" />
            </SelectParameters>
            <UpdateParameters>
                <asp:Parameter Name="GroupsRID" Type="Int32" />
                <asp:Parameter Name="ProductCodeRID" Type="Int32" />
                <asp:Parameter Name="ProductRID" Type="Int32" />
                <asp:Parameter Name="PoolRID" Type="Int32" />
                <asp:Parameter Name="PlanName" Type="String" />
                <asp:Parameter Name="PlanID" Type="Int32" />
                <asp:Parameter Name="ProductID" Type="Int32" />
                <asp:Parameter Name="AdminPercent" Type="String" />
                <asp:Parameter Name="ArizonaEmployees" Type="String" />
                <asp:Parameter Name="BenefitChanges" Type="Int32" />
                <asp:Parameter Name="EmployeesAfterWaivers" Type="String" />
                <asp:Parameter Name="ParticipationPercent" Type="String" />
                <asp:Parameter Name="TheoreticalPremium" Type="String" />
                <asp:Parameter Name="CCBrokerOnCorrespondence" Type="String" />
                <asp:Parameter Name="ClaimSystemPlanNameRider" Type="String" />
                <asp:Parameter Name="COBRAAdminEntityRID" Type="Int32" />
                <asp:Parameter Name="Commission" Type="String" />
                <asp:Parameter Name="CoveragePastRetirement" Type="String" />
                <asp:Parameter Name="DependentAgeLimit" Type="String" />
                <asp:Parameter Name="DomesticPartnerCoverage" Type="String" />
                <asp:Parameter Name="EligibleEmployeeCount" Type="String" />
                <asp:Parameter Name="EmployerGroupContribution" Type="String" />
                <asp:Parameter Name="EnrollmentCount" Type="String" />
                <asp:Parameter Name="ERISA" Type="String" />
                <asp:Parameter Name="ExternalID" Type="Int32" />
                <asp:Parameter Name="ExternalCarrierEntityRID" Type="Int32" />
                <asp:Parameter Name="FundingTypeRID" Type="Int32" />
                <asp:Parameter Name="GenerateRenewal" Type="String" />
                <asp:Parameter Name="HandbookTypeRID" Type="Int32" />
                <asp:Parameter Name="HandbookDistributionRID" Type="Int32" />
                <asp:Parameter Name="InternalCOB" Type="String" />
                <asp:Parameter Name="LegalGuardianship" Type="String" />
                <asp:Parameter Name="NewHireWaitingPeriod" Type="String" />
                <asp:Parameter Name="OnlineEnrollment" Type="String" />
                <asp:Parameter Name="ParticipationRequirement" Type="String" />
                <asp:Parameter Name="RiskPercent" Type="String" />
                <asp:Parameter Name="RiskTier" Type="String" />
                <asp:Parameter Name="SASDivisionRID" Type="String" />
                <asp:Parameter Name="SASPlanRID" Type="String" />
                <asp:Parameter Name="ContractLengthRID" Type="String" />
                <asp:Parameter Name="StepChildrenCoverageTypeRID" Type="String" />
                <asp:Parameter Name="TargetLossRatio" Type="String" />
                <asp:Parameter Name="UnderwritingCompanyRID" Type="String" />
                <asp:Parameter Name="VoluntaryContributoryTypeRID" Type="String" />
                <asp:Parameter Name="EditorUsersRID" Type="String" />
                <asp:Parameter Name="EffectiveStartDate" Type="String" />
                <asp:Parameter Name="EffectiveEndDate" Type="String" />
                <asp:Parameter Name="Stamp" Type="String" />
                <asp:Parameter Name="SequenceNumber" Type="String" />
                <asp:Parameter Name="ActiveFlag" Type="String" />
                <asp:Parameter Name="Note" Type="String" />
                <asp:Parameter Name="HistoryNotes" Type="String" />
            </UpdateParameters>
        </asp:SqlDataSource>

为了清楚起见,我删除了 ItemTemplate 和 EditItemTemplate 中的所有其他字段,以免您头疼。我将它们留在了 SqlDataSource 中,因此您可以看到我正在使用的字段相当多。

据我所知,我已正确设置所有内容,甚至从头开始完全重做所有内容,以确保一切正常。有没有人有任何提示?非常感谢您的宝贵时间。

【问题讨论】:

    标签: c# asp.net sqldatasource formview


    【解决方案1】:

    将原始值添加到您的参数列表中:

    <UpdateParameters> 
                <asp:Parameter Name="GroupsRID" Type="Int32" /> 
                <asp:Parameter Name="original_GroupsRID" Type="Int32" /> 
                <asp:Parameter Name="ProductCodeRID" Type="Int32" /> 
                <asp:Parameter Name="original_ProductCodeRID" Type="Int32" /> 
                <asp:Parameter Name="ProductRID" Type="Int32" /> 
                <asp:Parameter Name="original_ProductRID" Type="Int32" /> 
    

    您还需要修改存储过程 (Plans_Update) 以接受这些值。

    【讨论】:

    • 感谢您的建议。我以前试过,但为了以防万一,我又试了一次。不幸的是,它并不能阻止错误被抛出:“您已指定更新命令比较 SqlDataSource 'SqlPlanSourceAgain' 上的所有值,但传入 oldValues 的字典为空。传入有效字典以进行更新或更改您的模式为 OverwriteChanges。”此外,存储过程需要 original_ 值。
    • 我认为参数是将从SqlDataSource传递给存储过程的参数,但是FormView尚未为SqlDataSource提供OldValues字典,因此无法填写那些原始_参数。
    • @iAmWonder - 由于您似乎在 FormView 中使用第 3 方控件,您是否尝试过使用
    • 我的问题最终变成了其他问题,而我并没有提出正确的问题来获得该解决方案。但是,提供的解决方案是正确的,所以我会这样标记它。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2022-01-14
    相关资源
    最近更新 更多