2012-07-11 20 views
0

我一直在尋找這個解決方案4天 - 幫助我stackoverflow ..你是我唯一的希望。FormView不提供OldValues到其更新的SqlDataSource

我正在使用FormView來編輯大表的行。 FormView的DataSource是使用DataSourceId屬性指定的。

SqlDataSource具有指定的OldValuesParameterFormatString,以及將ConflictDetection設置爲「CompareAllValues」。

我的問題是,OldValues尚未被FormView設置,因此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中,這樣你就可以看到我正在玩的很多領域。

據我所知,我已經正確地設置了一切,甚至從頭開始重做所有事情,只是爲了確保。有沒有人有任何提示?非常感謝您的參與。

回答

0

原始值添加到您的參數列表:

<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)接受這些數值。

+0

謝謝你的建議。我曾嘗試過,但爲了以防萬一。它不會阻止錯誤被拋出:「你已經指定你的更新命令比較SqlDataSource的'SqlPlanSourceAgain'上的所有值,但傳入的oldValues字典是空的。傳遞一個有效的字典用於更新或更改你的模式OverwriteChanges「。另外,存儲過程期待original_值。 – iamwonder 2012-07-12 16:42:54

+0

我認爲這些參數是從SqlDataSource傳遞給存儲過程的,但SqlDataSource尚未由FormView提供OldValues字典,因此它無法填充這些original_參數。 – iamwonder 2012-07-12 17:30:50

+0

@iAmWonder - 由於您似乎在FormView中使用第三方控件,您是否嘗試過使用 DaveB 2012-07-12 18:30:10