简体   繁体   English

asp.net c#在从服务器端代码更改索引时阻止触发selectedindexchanged事件

[英]asp.net c# prevent firing selectedindexchanged event while changing index from serverside code

I have two dropdownlist controls on the same aspx page as 我在同一个aspx页面上有两个下拉列表控件

<asp:DropDownList ID="ddlM" runat="server" Width="123px" AutoPostBack="True" OnSelectedIndexChanged="ddlM_SelectedIndexChanged">
</asp:DropDownList>

<asp:DropDownList ID="ddlC" runat="server" Width="123px" AutoPostBack="True" OnSelectedIndexChanged="ddlC_SelectedIndexChanged">
</asp:DropDownList>

the C# code for OnSelectedIndexChanged of both are as below : OnSelectedIndexChanged的C#代码如下:

protected void ddlC_SelectedIndexChanged(object sender, EventArgs e)
{
   ddlM.SelectedIndex = 0;
   ViewState["ddlC"] = true;
   ViewState["ddlM"] = false;                 
   BindPGrid();            
}

protected void ddlM_SelectedIndexChanged(object sender, EventArgs e)
{
   ddlC.SelectedIndex = 0;                
   ViewState["ddlC"] = false;
   ViewState["ddlM"] = true; 
   BindPGrid();
}

both are populated by database record items using some server-side code. 两者都使用一些服务器端代码填充数据库记录项。 Now, OnSelectedIndexChanged event of "ddlM" I want to make selected the first index of "ddlC" but WITHOUT firing the event ddlC_SelectedIndexChanged. 现在,OnSelectedIndexChanged事件“ddlM”我想选择“ddlC”的第一个索引但是没有触发事件ddlC_SelectedIndexChanged。 And same for "ddlC" as OnSelectedIndexChanged event of "ddlC" I want to make selected the first index of "ddlM" but WITHOUT firing the event ddlM_SelectedIndexChanged. 对于“ddlC”和“ddlC”的OnSelectedIndexChanged事件一样,我想选择“ddlM”的第一个索引但是没有触发事件ddlM_SelectedIndexChanged。 Right not it fires the event. 对不起它发射事件。 How can I do prevent it? 我怎么办呢?

Thanks 谢谢

Alternatively you can remove and re-add the SelectedIndexChanged event handler from the control 或者,您可以从控件中删除并重新添加SelectedIndexChanged事件处理程序

 ddlM.SelectedIndexChanged -= ddlM_SelectedIndexChanged;

 ddlM.SelectedIndex = 0;
 ViewState["ddlC"] = false;
 ViewState["ddlM"] = true; 
 BindPGrid();

 ddlM.SelectedIndexChanged += ddlM_SelectedIndexChanged;

Then you don't have to mess with global flags 然后你不必乱用全局标志

In such cases we create a global bool flag and sets its value to true before changing SelectedIndexChanged . 在这种情况下,我们创建一个全局bool标志,并在更改SelectedIndexChanged之前将其值设置为true And in the other Control's SelectedIndexChanged check its value if its true. 而在其他Control的SelectedIndexChanged检查其值是否为true。 If true we return it outside the event. 如果是真的,我们会在活动之外返回。 And change flag value again when outside. 并在外面再次更改标志值。 Make sure to always change flag value back to false or else it would never fire if that event is generated by same control. 确保始终将标志值更改回false,否则如果该事件由同一控件生成,则永远不会触发。

boool flag = false;

protected void ddlC_SelectedIndexChanged(object sender, EventArgs e)
{
   flag = true;
   ddlM.SelectedIndex = 0;
   flag = false;
   ViewState["ddlC"] = true;
   ViewState["ddlM"] = false;                 
   BindPGrid();            
}

protected void ddlM_SelectedIndexChanged(object sender, EventArgs e)
{
   if(flag)
       return;

   ddlC.SelectedIndex = 0;                
   ViewState["ddlC"] = false;
   ViewState["ddlM"] = true; 
   BindPGrid();
}

or you can remove the event handler like 或者你可以删除像这样的事件处理程序

protected void ddlC_SelectedIndexChanged(object sender, EventArgs e)
{
   ddlM.SelectedIndexChanged -= ddlM_SelectedIndexChanged;
   ddlM.SelectedIndex = 0;
   ddlM.SelectedIndexChanged += ddlM_SelectedIndexChanged;
   ViewState["ddlC"] = true;
   ViewState["ddlM"] = false;                 
   BindPGrid();            
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 ASP.NET / C#:DropDownList SelectedIndexChanged事件未触发 - ASP.NET / C#: DropDownList SelectedIndexChanged event not firing ASP.NET/C# SelectedIndexChanged无法启动 - ASP.NET/C# SelectedIndexChanged not firing on ASP.NET MVC C#-DropDownList SelectedIndexChanged不触发 - Asp.net MVC C# - DropDownList SelectedIndexChanged not firing ASP.NET / C#:DropDownList在服务器控件中没有触发的SelectedIndexChanged - ASP.NET / C#: DropDownList SelectedIndexChanged in server control not firing ASP.Net RadioButtonList SelectedIndexChanged事件未触发 - ASP.Net RadioButtonList SelectedIndexChanged event not firing ASP.NET按钮的onclick事件未触发服务器端代码 - Asp.net button onclick event is not firing serverside code 从ASP.NET C#中的数据库设置数据时,下拉所选索引已更改的事件触发 - dropdown selected index changed event fires while setting data from database in asp.net c# ASP.Net下拉列表没有返回selectedindexchanged事件的索引 - ASP.Net dropdownlist not returning index on selectedindexchanged event 在SelectedIndexChanged Asp.NET C#中如何防止重新键入信息 - How to prevent re-type info when SelectedIndexChanged Asp.NET C# 嵌套的ASP.NET DropDownList SelectedIndexChanged未触发 - Nested ASP.NET DropDownList SelectedIndexChanged Not Firing
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM