我有一个带有5个GridView控件的asp.net页面,所有这些控件都链接到同一个SelectedIndexChanged事件,如下所示
<div id="containerOne" class ="containerLeft">
<h2 class="WorkInProgressHeading">To Analyse</h2>
<asp:LinkedGridView runat="server" ID ="grdAwaitingAnalysis" CssClass="Grid" OnSelectedIndexChanged="grid_SelectedIndexChanged">
<AlternatingRowStyle CssClass="GridAltItem"/>
<RowStyle CssClass="GridItem"/>
<SelectedRowStyle CssClass="GridSelectedItem"/>
</asp:LinkedGridView>
</div>
<div id="containerTwo" class="containerLeft">
<h2 class="WorkInProgressHeading">Analysing...</h2>
<asp:LinkedGridView runat="server" ID="grdAnalysisInProgress" CssClass="Grid" OnSelectedIndexChanged="grid_SelectedIndexChanged">
<AlternatingRowStyle CssClass="GridAltItem"/>
<RowStyle CssClass="GridItem"/>
<SelectedRowStyle CssClass="GridSelectedItem"/>
</asp:LinkedGridView>
</div> etc.....
在后面的代码中,事件处理程序如下
protected void grid_SelectedIndexChanged(object sender, EventArgs e)
{
var sendingGrid = sender as LinkedGridView;
if (sendingGrid.ID != "grdAwaitingAnalysis") grdAwaitingAnalysis.SelectedIndex = -1;
if (sendingGrid.ID != "grdAnalysisInProgress") grdAnalysisInProgress.SelectedIndex = -1;
if (sendingGrid.ID != "grdAwaitingReporting") grdAwaitingReporting.SelectedIndex = -1;
if (sendingGrid.ID != "grdAwaitingInterp") grdAwaitingInterp.SelectedIndex = -1;
if (sendingGrid.ID != "grdInterpInProgress") grdInterpInProgress.SelectedIndex = -1;
}
我很惊讶这并没有导致stackoverflow异常,因为当每个选定的索引设置为-1时,我希望grid_SelectedIndexChanged事件再次触发,但事实并非如此。
这是因为它是一个网页而不是WPF / Winforms情况吗? 我对ASP.NET比较陌生,所以我在思考类似于WPF / WinForms应用程序时错了吗?
感谢。
答案 0 :(得分:0)
这是因为它是一个网页而不是WPF
可能。在非AJAX表单中,如果索引与之前的呈现不同,IndexChanged
事件仅在回发上触发。
在WPF / Winforms世界中,事件附加到实际控件,因此当值更改时,事件会立即触发 。
请记住,事件仅在索引实际更改时触发。将其设置为相同的值不会触发事件。