我怀疑这是由于我不太了解asp.net中的Page Lifecycle,但我有一个奇怪的问题。
我有一个gridview,用户从中选择一行。所选行应为“aqua”,其余为白色。
我在RowDataBound上使用一个事件来制作一个“荧光笔”来突出显示用户悬停的行。当用户将鼠标移出时,它应恢复为之前的颜色。 (非选定行为白色,或所选行为浅绿色。)
protected void gvCounts_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (gvCounts.SelectedIndex == -1) { gvCounts.SelectedIndex = 0; }
string oldColor = "white";
if (e.Row.RowIndex == gvCounts.SelectedIndex)
{
e.Row.BackColor = System.Drawing.Color.Aqua;
oldColor = "aqua";
}
e.Row.Attributes["onmouseover"] = "this.style.cursor='hand';this.style.backgroundColor='yellow';";
e.Row.Attributes["onmouseout"] = "this.style.backgroundColor='" + oldColor + "';";
e.Row.Attributes["onclick"] = ClientScript.GetPostBackClientHyperlink(this.gvCounts, "Select$" + e.Row.RowIndex);
}
}
由于某种原因,所选行总是落后于用户点击的行。当页面加载时,所选行设置为0.如果我然后单击第2行,页面将刷新,第0行仍为aqua。
如果我然后单击第4行,第2行将成为选定的行。如果我单击另一行,将选择第4行 - 它始终位于所选行的“后面”。
答案 0 :(得分:0)
我没有触发Gridview.OnSelectedIndexChanged事件。修复此问题,方法是在此触发时添加重绘页面的方法。