我在窗體上有2 DropDownList
控件,其中第二個使用第一個SelectedValue
作爲其綁定參數之一。在模板控件中實現級聯DropDownList綁定
兩個DropDownList
控制是在綁定到使用一個綁定表達式的FormView
的數據源一個FormView.InsertItemTemplate
與SelectedValue
性質。
第一次FormView
呈現在插入模式下,一切工作正常。問題是在從DropDownList
開始的AutoPostBack
之後,FormView
沒有(重新)綁定,但是由於第二個DropDownList
上的ControlParameter
發生了變化,它會進行綁定(如預期的那樣),但綁定表達式
System.InvalidOperationException:第二DDL,我由於
FormView
假定沒有對通結合數據綁定方法如eval()函數, 的XPath()和綁定()只能在上下文中使用的數據綁定 控制。
下面是標記:
<InsertItemTemplate>
.
.
.
<tr class="GridViewRowB">
<td class="GridViewCell">
Offense Type
</td>
<td class="GridViewCell">
<asp:DropDownList ID="ddlOffenseType" runat="server" DataSourceID="dsOffenseType"
AutoPostBack="true" DataValueField="OffenseTypeID" DataTextField="Description"
SelectedValue='<%# Bind("OffenseTypeID") %>'>
</asp:DropDownList>
<asp:ObjectDataSource ID="dsOffenseType" runat="server" TypeName="OffenseType"
SelectMethod="GetAll">
<SelectParameters>
<asp:Parameter Name="ActiveOnly" DefaultValue="True" Type="Boolean" />
</SelectParameters>
</asp:ObjectDataSource>
</td>
</tr>
<tr class="GridViewRowA">
<td class="GridViewCell">
Attorney
</td>
<td class="GridViewCell">
<asp:DropDownList ID="ddlAttorney" runat="server" DataSourceID="dsAttorney" DataValueField="AttorneyID"
DataTextField="AttorneyNameWithCount" SelectedValue='<%# Bind("AttorneyID") %>'>
</asp:DropDownList>
<asp:ObjectDataSource ID="dsAttorney" runat="server" TypeName="Attorney"
SelectMethod="GetAttorneyWithCaseCount">
<SelectParameters>
<asp:Parameter Name="ActiveOnly" DefaultValue="True" Type="Boolean" />
<asp:ControlParameter Name="OffenseTypeID" Type="Int32" ControlID="ddlOffenseType"
PropertyName="SelectedValue" />
</SelectParameters>
</asp:ObjectDataSource>
</td>
</tr>
.
.
.
</InsertItemTemplate>
我的問題是:是什麼力量讓這個功能工作的最佳方法?是否有可能將兩個DDL都保存在模板中?我寧願避免使用AJAX工具包或其他客戶端解決方案。
OK等等....然後我需要處理的FormView' .ItemInserting'並手動添加參數?在編輯模式下,同樣的問題呢?手動處理初始值和更新值?示例代碼爲後代將不勝感激。 – pseudocoder
呀,確切地說。你也必須做同樣的編輯。 –
我驗證了此解決方案的正常工作。謝謝!我有一些類似的想法,但不知道大多數人如何解決這個問題。 – pseudocoder