如何在DetailsView内的UpdatePanel中将数据绑定到DropDownList

gre*_*mul 5 asp.net data-binding updatepanel drop-down-menu

我使用 DetailsView 在数据库中插入行。行有字段 id、subcategory_id 等。我想动态填充在 TemplateField 中使用的下拉列表 ddl_subcategories。第一个下拉列表 ddl_categories 的选定项值用作为 ddl_subcategories 生成集合的参数。我尝试使用 UpdatePanel,但方法 DataBind 返回错误“诸如 Eval()、XPath() 和 Bind() 之类的数据绑定方法只能在数据绑定控件的上下文中使用。”。

有网页表格的代码

<asp:DetailsView ID="dvw" runat="server" Height="50px" Width="125px" 
    AutoGenerateRows="False" DataSourceID="ods"
    DefaultMode="Insert" DataKeyNames="Section_id"
    OnDataBound="dvw_DataBound" OnItemUpdated="dvw_ItemUpdated" 
    OnItemCommand="dvw_ItemCommand">
    <Fields>
    <asp:TemplateField HeaderText="Category" >
       <ItemTemplate>
                 <asp:DropDownList ID="ddl_categories" runat="server" AutoPostBack="true" DataSourceID="ods_categories"
                  DataTextField="Name" DataValueField="Category_id" OnSelectedIndexChanged="category_select_index_changed"/>
       </ItemTemplate>
    </asp:TemplateField>            

    <asp:TemplateField HeaderText="Subcategory" >
        <ItemTemplate>
            <asp:UpdatePanel runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:DropDownList ID="ddl_subcategories" runat="server"                               
                          SelectedValue='<%# Bind("Subcategory_id") %>' />
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="ddl_categories" EventName="SelectedIndexChanged" />
                </Triggers>
            </asp:UpdatePanel>
        </ItemTemplate>
    </asp:TemplateField>
...
 </Fields>
</asp:DetailsView>
Run Code Online (Sandbox Code Playgroud)

有一部分背后的代码:

protected void category_select_index_changed(object sender, EventArgs e)
{
    DropDownList ddl_categories = (DropDownList)dvw.FindControl("ddl_categories");
    List<SUBCATEGORY> sections =  SUBCATEGORY.Select_all_by_parameters(Int32.Parse(ddl_categories.SelectedValue));//Select all subcategories by id of category
    DropDownList ddl_subcategories= (DropDownList)dvw.FindControl("ddl_subcategories");

    ddl_subcategories.DataSource = sections;
    ddl_subcategories.DataTextField = "Name";
    ddl_subcategories.DataValueField = "Subcategory_id";
    ddl_subcategories.DataBind();
}
Run Code Online (Sandbox Code Playgroud)

我的错误是什么?谢谢。

Bri*_*ins 0

尝试用更新面板包裹整个DetailsView,看看这是否有所不同......