4

我有一个表单视图,在编辑模板中我有两个下拉菜单。下拉 1 明确设置了允许值的列表。它也设置为自动回发。下拉 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>

任何有关如何使其发挥作用的帮助都将不胜感激。

4

3 回答 3

3

我在 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;
于 2008-10-08T16:13:28.797 回答
0

听起来控件在回发后没有正确地进行数据绑定。

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

回发后,可能存在第二个下拉菜单的 SelectedValue 设置为不存在的项目的问题。

于 2008-08-22T16:30:08.337 回答
0

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

Connect_ToProjectId 应该来自哪里?

于 2008-08-25T03:09:01.967 回答