Gridview SelectedIndex“滞后”与回发

时间:2011-02-21 15:11:04

标签: asp.net gridview postback

我怀疑这是由于我不太了解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行 - 它始终位于所选行的“后面”。

1 个答案:

答案 0 :(得分:0)

我没有触发Gridview.OnSelectedIndexChanged事件。修复此问题,方法是在此触发时添加重绘页面的方法。