Formview Dropdown 2取决于Dropdown 1

时间:2008-08-22 14:30:33

标签: asp.net formview

我有一个表单视图,在编辑模板中我有两个下拉列表。 使用允许值列表显式设置下拉1。它也设置为autopostback。 下拉2是数据绑定到objectdatasource,此objectdatasource使用第一个下拉列表作为其中一个参数。 (想法是下拉1限制下拉2中显示的内容)

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

  

数据绑定方法,如Eval(),   只能使用XPath()和Bind()   在数据绑定控件的上下文中。

以下是下拉列表#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>

任何有关如何使其发挥作用的帮助都会受到极大关注。

3 个答案:

答案 0 :(得分:3)

我在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;

答案 1 :(得分:0)

听起来好像控件在回发后没有正确数据绑定。

您是在数据绑定页面中的第一个下拉列表还是代码隐藏中? 如果是代码隐藏,你每次都在on_init或on_load上进行吗?

可能存在第二次下拉列表的SelectedValue在回发后设置为不存在的项目的问题。

答案 2 :(得分:0)

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

Connect_ToProjectId应该来自哪里?