2012-08-13 70 views
0

我有两个下拉列表在detailsview中的两个不同的字段内,第一个确定第二个值的值。DropDownList Autopostback清除字段,恢复为默认

当我从第一个ddl中选择一个值时,autopostback将删除detailsview中的所有数据,并将第一个下拉列表恢复为第一个选择。

此外,当我从列表中选择(改变DDL选择一次以上),它会抛出:

数据绑定方法如eval()函数,XPath的(),并绑定()只能在使用数据绑定控件的上下文。

描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关该错误的更多信息以及源代码的位置。

异常详细信息:System.InvalidOperationException:数据绑定方法(如Eval(),XPath()和Bind()只能用于数据绑定控件的上下文中。

源错误:

[没有相关的源行]

------First DDL 

<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SQLLEAVECODE" 
DataTextField="LEAVETYPE" DataValueField="LEAVECODE" 
onselectedindexchanged="DropDownList1_SelectedIndexChanged" 
AppendDataBoundItems="True" ViewStateMode="Enabled" AutoPostBack="True" 
SelectedValue='<%# BIND("REQLEAVECODE") %>' Width="80px"> 
<asp:ListItem> </asp:ListItem> 
</asp:DropDownList> 

-------Second DDL 

<asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="SqlDataSource1" 
DataTextField="REASON" DataValueField="REASON" 
SelectedValue='<%# Bind("leavetype") %>'> 
</asp:DropDownList> 



---------page load 
protected void Page_Load(object sender, EventArgs e) 
{ 
if (!IsPostBack) 
{ 
DetailsView1.DataBind(); 
} 
} 


--------DDL 1 selectedIndexChange 
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
DropDownList lvtype = (DropDownList)(DetailsView1.FindControl("DropDownList1")); 
DropDownList lvreason = (DropDownList)(DetailsView1.FindControl("DropDownList2")); 
Label27.Text = lvtype.SelectedValue.ToString(); 

DetailsView1.Fields[4].Visible = true; 
} 
+2

试试这个,你可能会有一些乐趣:http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/CascadingDropDown/CascadingDropDown.aspx – bugnuker 2012-08-13 23:21:41

+0

谢谢,我已经通过了,但我似乎有问题,因为ddl是在详细视图中,所以我无法让级联下拉列表在我的程序中正常工作 – user1596472 2012-08-15 14:20:44

回答

1

如果Drop-downDetailsView,那么请处理DetailsViewItemCommand event而不是DropDownList1_SelectedIndexChanged

希望这将帮助你

+0

它越来越近了。现在,当我从DDL1中选择时,它将在回发时保持选定值,但不允许DDL2填充。 – user1596472 2012-08-14 15:57:24

+0

您必须在DDL1的ItemCommand事件中重新绑定DDL2。 – Mohmedsadiq 2012-08-22 05:51:10

+0

这样做会导致此错误:数据绑定方法(如Eval(),XPath()和Bind()只能用于数据绑定控件的上下文中。 – user1596472 2012-08-23 13:35:10

0

您的标记是指ID="DropDownList1"ID="DropDownList2"

但是,您的事件处理函数参考DetailsView1.FindControl("DropDownList6")DetailsView1.FindControl("DropDownList6")。这可能与你的问题有关吗?

+0

对不起,这是我的转移错误,下拉列表被命名为5和6,但我认为这会令人困惑,因为6是第一个,5是第二个,所以为了论坛的目的,我将它改为1和2。 – user1596472 2012-08-14 16:02:57