4

FormViewEditItemTemplateにいくつかのDropDownListがあります。それらの1つはブローカーのリストであり、もう1つはブローカーアカウントのリストです。ブローカーのドロップダウンリストが変更された場合、アカウントのドロップダウンリストにそのブローカーのアカウントのリストを入力する必要があります。

ページは次のように始まります。

<asp:FormView
    ID="fvwEditTrade"
    DataSourceID="srcTrade" 
    runat="server" 
    DataKeyNames="tradeId" 
    DefaultMode="Edit" 
    CssClass="formView"
    OnItemUpdated="fvwEditTrade_Updated" 
    OnItemCommand="fvwEditTrade_Command" 
    OnItemUpdating="fvwEditTrade_Updating"            
    >
<EditItemTemplate>
    <asp:Label ID="lblTradeId" Text="TradeId: " runat="server" CssClass="label" /><%# Eval("tradeId") %>
    <br />

    <asp:Label ID="lblBroker" Text="Broker" runat="server" CssClass="label" />
    <asp:DropDownList 
    ID="ddlBrokers" 
    runat="server" 
    CssClass="dropdownlist" 
    DataSourceID="srcBrokers" 
    DataTextField="broker" 
    DataValueField="brokerId" 
    SelectedValue='<%# Bind("brokerId") %>'  
    AutoPostBack="true"             
     />
    <br />  

    <asp:Label ID="lblAccount" Text="Account" AssociatedControlID="ddlAccounts" runat="server" CssClass="label" />
    <asp:DropDownList 
    ID="ddlAccounts" 
    runat="server" 
    CssClass="dropdownlist" 
    DataSourceID="srcAccounts" 
    DataTextField="description" 
    DataValueField="accountId" 
    SelectedValue='<%# Bind("accountId") %>' 
     />
    <br />

私はそれから持っています

   <asp:Button
    id="lnkUpdate"
    Text="Update"
    CommandName="Update" CssClass="button"
    Runat="server" />

    <asp:Button
    id="lnkCancel"
    Text="Cancel"
    CommandName="Cancel" CssClass="button"
    Runat="server" />

</EditItemTemplate>
</asp:FormView>            


<CustomControls:CustomObjectDataSource
    id="srcTrade" 
    TypeName="DatabaseComponent.DBUtil" 
    SelectMethod="GetTrade"
    UpdateMethod="UpdateTrade"
    runat="server">
    <SelectParameters>
    <asp:QueryStringParameter Name="tradeId" QueryStringField="tradeId" />               
    </SelectParameters>
    <UpdateParameters>                
    <asp:ControlParameter Name="tradeId" ControlId="fvwEditTrade" PropertyName="SelectedValue" />
    <asp:ControlParameter Name="accountId" ControlId="fvwEditTrade$ddlAccounts" PropertyName="SelectedValue" />
    <asp:ControlParameter Name="symbol" ControlId="fvwEditTrade$ddlSymbols" PropertyName="SelectedValue" />
    <asp:ControlParameter Name="riskProfileId" ControlId="fvwEditTrade$ddlRiskProfiles" PropertyName="SelectedValue" />
    <asp:ControlParameter Name="pctAccountRisked" ControlId="fvwEditTrade$txtPctAccountRisked" PropertyName="Text" />
    <asp:ControlParameter Name="tradeSetupId" ControlId="fvwEditTrade$ddlSetups" PropertyName="SelectedValue" />
    <asp:ControlParameter Name="amountPerUnit" ControlId="fvwEditTrade$txtamountPerUnit" PropertyName="Text" />
    <asp:ControlParameter Name="initialStopPrice" ControlId="fvwEditTrade$txtInitialStopPrice" PropertyName="Text" />
    <asp:ControlParameter Name="tfCode" ControlId="fvwEditTrade$ddlTimeFrames" PropertyName="SelectedValue" />
    <asp:ControlParameter Name="MAEPips" ControlId="fvwEditTrade$txtMAEPips" PropertyName="Text" />
    <asp:ControlParameter Name="MFEPips" ControlId="fvwEditTrade$txtMFEPips" PropertyName="Text" />
    <asp:ControlParameter Name="tradeGrade" ControlId="fvwEditTrade$ddlTradeGrades" PropertyName="SelectedValue" />
    <asp:ControlParameter Name="executionGrade" ControlId="fvwEditTrade$ddlExecutionGrades" PropertyName="SelectedValue" />
    <asp:ControlParameter Name="comment" ControlId="fvwEditTrade$txtComments" PropertyName="Text" />
    </UpdateParameters>
</CustomControls:CustomObjectDataSource>

<CustomControls:CustomObjectDataSource
    id="srcBrokers" 
    TypeName="DatabaseComponent.DBUtil" 
    SelectMethod="GetBrokers" 
    runat="server">
</CustomControls:CustomObjectDataSource>

<CustomControls:CustomObjectDataSource
    id="srcAccounts" 
    TypeName="DatabaseComponent.DBUtil" 
    SelectMethod="GetBrokerAccounts" 
    runat="server">
    <SelectParameters>
    <asp:ControlParameter Name="brokerId" ControlId="fvwEditTrade$ddlBrokers" PropertyName="SelectedValue" />
    </SelectParameters>
</CustomControls:CustomObjectDataSource>        

ページが読み込まれると、次のエラーが発生します。

Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control.

CustomObjectDataSources srcBrokersとsrcAccountsをEditItemTemplateの「内部」に移動すると、ページは正常に読み込まれますが、ddlBrokersでブローカーを選択すると、同じエラーが再び発生します。

Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control.

これを修正する方法について何かアイデアはありますか?データソースはEditItemTemplateの外部にあるべきですか、それとも内部にあるべきですか?

4

4 に答える 4

0

FormViewのItemUpdatedが発生したときのフラグを追加します。FormViewのPreRenderで、(IsPostBack &&!_fvWasUpdated){formView1.DataBind();}かどうかを確認します。

これで修正されます。問題は、FormViewがポストバックでDataBindingを実行しないことです。ポストバックがフォームビュー自体からのものでない場合、データコンテキストが失われます。

于 2012-02-26T23:42:40.770 に答える
0

Eval()代わりに試すことができますかBind()

于 2011-05-18T13:58:52.023 に答える
0

SelectedValue='<%# Bind("accountId") %>'ddlAccountsからバインディング式を削除します。これが問題の原因です。これはコードビハインドから処理する必要があります。

アイテムを更新しようとすると、このドロップダウンの選択された値をに渡す必要がありますFormView ItemUpdating Event

于 2011-05-18T15:24:43.183 に答える
0
SelectedValue='<%# xx(DataBinder.Eval(Container.DataItem,"fieldname")) %>' 

xxを次のような関数にします。

Function xx(ByVal a As String) As String
    Return a
End Function
于 2014-02-28T16:25:34.747 に答える