我有一个表单视图,在编辑模板中我有两个下拉列表。 使用允许值列表显式设置下拉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>
任何有关如何使其发挥作用的帮助都会受到极大关注。
答案 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应该来自哪里?