加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 在模板化控件中实现级联DropDownList绑定

发布时间:2020-12-16 00:15:30 所属栏目:asp.Net 来源:网络整理
导读:我的表单上有2个DropDownList控件,第二个控件使用第一个的SelectedValue作为其绑定参数之一. DropDownList控件都在FormView.InsertItemTemplate中,其SelectedValue属性使用绑定表达式绑定到FormView的数据源. FormView第一次在插入模式下渲染,一切正常.问题
我的表单上有2个DropDownList控件,第二个控件使用第一个的SelectedValue作为其绑定参数之一.

DropDownList控件都在FormView.InsertItemTemplate中,其SelectedValue属性使用绑定表达式绑定到FormView的数据源.

FormView第一次在插入模式下渲染,一切正常.问题是在第一个DropDownList的AutoPostBack之后,FormView没有(重新)绑定,但是由于第二个DropDownList上的ControlParameter已经改变,它会绑定(按预期),但是绑定表达式上发生异常.第二个DDL,我假设因为FormView没有绑定该传递:

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

这是标记:

<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工具包或其他客户端解决方案.

解决方法

当我们在像像DetailsView / FormView这样的数据绑定控件中使用级联下拉列表时,这是一个问题,而且我已多次面对它.您必须从第二个下拉列表中删除绑定表达式SelectedValue =’<%#Bind(“AttorneyID”)%>‘,然后它将起作用.

其次,如果删除Binding表达式,则必须在FormView ItemInserting Event中手动传递值.例如

protected void frmAsset_ItemInserting(object sender,FormViewInsertEventArgs e)
 {
    eValues["AttorneyID"] = ((DropDownList)((FormView)sender).FindControl("ddlAttorny")).SelectedValue;
 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读