当SelectedIndex更改时,ListBox不会触发OnSelectedIndexChanged事件

时间:2010-08-24 19:14:28

标签: asp.net events event-handling listbox

我有一个带有列表框的asp.net页面。多个事件处理程序订阅其OnSelectedIndexChanged事件。

当我以编程方式更改SelectedIndex 时,没有任何事件被触发。

现在这样做是为了调用每个事件处理程序,但是这已经导致了错误,因为人们在添加新的事件处理程序时不知道他们必须这样做。

我可以在Winforms应用中执行此操作,即使在代码中更改了SelectedIndex,事件也会触发。有没有人见过这个?

2 个答案:

答案 0 :(得分:2)

看一下ListBox类的源代码及其基础 - ListControl。您会注意到从RaisePostDataChangedEvent方法调用OnSelectedIndexChanged方法。这意味着,只有在客户端更改了所选索引并且ViewState中存储的值与PostData不相等时才会引发SelectedIndexChanged事件。因此,如果在服务器代码中更改了SelectedIndex,则不应引发此事件。

答案 1 :(得分:0)

作为一种解决方法,我更改数据库中的数据并完成相关事件,然后使用JavaScript重新加载数据。

场景:ASPxGridView控件dtgRepair删除行,同时,ASPxComboBox值以编程方式更改。

服务器:

protected void dtgRepair_CustomCallback(object sender, ASPxGridViewCustomCallbackEventArgs e)
{    
// update database here...
cmbMRType.SelectedIndex = 1;
dtgRepair.JSProperties["cpCallbackAction"] = "DeleteEntry";
}  

客户:

function dtgRepair_EndCallback(s,e) { 
    if(cmbMRType.GetSelectedIndex() == 2 && dtgRepair.cpCallbackAction == "DeleteEntry" ) 
        window.location.reload(true);
}