我有一个带有列表框的asp.net页面。多个事件处理程序订阅其OnSelectedIndexChanged
事件。
当我以编程方式更改SelectedIndex
时,没有任何事件被触发。
现在这样做是为了调用每个事件处理程序,但是这已经导致了错误,因为人们在添加新的事件处理程序时不知道他们必须这样做。
我可以在Winforms应用中执行此操作,即使在代码中更改了SelectedIndex
,事件也会触发。有没有人见过这个?
答案 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);
}