是否可以在SelectedIndexChanged事件触发的回发时重新DataBind DropDownList?

时间:2011-02-03 14:46:20

标签: c# asp.net vb.net concurrency

假设我有一个产品类别的DropDownList和一个基于DropDownList中类别选择的产品ListView。当用户访问该页面时,可能会出现一致性问题,因为属于新类别的新产品可能会在用户浏览时添加到库存中。

当用户选择要查看的其他类别(SelectedIndexChanged事件)并导致回发时,我希望DropDownList更新类别列表以包括同时添加的新类别,同时仍能够创建更改所选索引。回发时,DropDownList似乎不支持此更新。那么如何处理这个并发问题?

4 个答案:

答案 0 :(得分:7)

无论是否检查Page_Init 事件中的回发下拉列表,您都需要绑定并重新绑定。 不会对下拉列表的选定索引进行任何更改,您可以继续正常工作,在加载视图状态之前调用页面init方法。表示在此方法之后将选择您的下拉列表索引,您可以使用dropdown_selectedIndexChanged方法访问它。

有关ASP.Net page life cycle

的更多信息

修改1:查看示例代码

protected void Page_Init(object sender, EventArgs e)
{
    // here you bind your dropdown
    // don't check IsPostBack
    DropdownList1.DataSource = db.GetCategories();
    DropdownList1.DataTextField = "TextField";
    DropdownList1.DataValueField = "ValueField";
    DropdownList1.DataBind();
}

ASP.Net在 Page_Init 之后和 Page_Load 事件之前加载控制视图状态,因此DropDownList1的selectedIndex不会受到影响,并且您得到了所需的结果。

答案 1 :(得分:1)

只需检查页面调用是否为IsPostBack的回发,然后在下拉列表中调用dataBind()

答案 2 :(得分:1)

当然,您可以在回发后更改数据源。您甚至可以通过调用DropDownListbox上的DataBind()方法来刷新其中的数据。

答案 3 :(得分:0)

如果由于某种原因无法在Page_Init中绑定(如在我的情况下),则执行此操作的另一种方法:

var selected = ddList.SelectedValue;
ddList.DataSource = DBHelper.GetCategories();
ddList.DataBind();
ddList.SelectedValue = selected;

删除所选类别时,您仍需要处理情况。