Formview下拉菜单2取决于下拉菜单1

时间:2020-03-05 18:42:03  来源:igfitidea点击:

我有一个表单视图,在编辑模板中有两个下拉菜单。
下拉列表1是使用允许值列表明确设置的。它还设置为自动回发。
下拉列表2是数据绑定到对象数据源的对象,此对象数据源使用第一个下拉列表作为其参数之一。 (想法是下拉菜单1限制下拉菜单2中显示的内容)

在项目的编辑模板的第一个视图上,它可以正常工作。但是,如果下拉菜单1选择了其他项目,则会回发并产生错误

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

这是下拉列表2:

<asp:DropDownList ID="ProjectList" runat="server" SelectedValue='<%# Bind("ConnectToProject_ID","{0:D}") %>' DataSourceID="MasterProjectsDataSource2" DataTextField="Name" DataValueField="ID" AppendDataBoundItems="true">
      <asp:ListItem Value="0" Text="{No Master Project}" Selected="True" />
</asp:DropDownList>

这是MasterProjectDataSource2:

<asp:ObjectDataSource ID="MasterProjectsDataSource2" runat="server" 
            SelectMethod="GetMasterProjectList" TypeName="WebWorxData.Project" >
            <SelectParameters>
                <asp:ControlParameter ControlID="RPMTypeList" Name="RPMType_ID" 
                    PropertyName="SelectedValue" Type="Int32" />
            </SelectParameters>
        </asp:ObjectDataSource>

对于如何使它起作用的任何帮助将得到极大的帮助。

解决方案

回答

回传后听起来控件未正确绑定数据。

我们是否要绑定页面或者后面代码中的第一个下拉列表?
如果是代码隐藏的,则每次都在on_init或者on_load中进行吗?

在回发之后,第二个下拉列表的SelectedValue设置为不存在的项目可能会出现问题。

回答

除非第二个下拉列表位于数据绑定控件(例如,Repeater)中,否则我不确定我们要绑定SelectedValue的内容。显然,.NET都不是,因为这可能是发生错误的地方。

Connect_ToProjectId应该来自哪里?

回答

我在FormView中绑定下拉列表时遇到了类似的问题。我通过在formview的" OnDataBound"中手动设置选定的值来解决此问题。

(不知道从何处获取ConnectToProject_ID)

FormView fv = (FormView)sender;
DropDownList ddl = (DropDownList)fv.FindControl("ProjectList");
ddl.SelectedValue = String.Format("{0:D}", ConnectToProject_ID);

准备保存时,请使用" OnItemInserting"事件:

FormView fv = (FormView)sender;
DropDownList ddl = (DropDownList)fv.FindControl("ProjectList");
e.Values["ConnectToProject_ID"] = ddl.SelectedValue;

或者" OnItemUpdating"

准备保存时,请使用" OnItemInserting"事件:

FormView fv = (FormView)sender;
DropDownList ddl = (DropDownList)fv.FindControl("ProjectList");
e.NewValues["ConnectToProject_ID"] = ddl.SelectedValue;