3

我正在使用以下代码突出显示用户在 gridview 中单击的行(并取消突出显示先前选择的行):

    protected void PartListRowClicked(object sender, GridViewRowClickedEventArgs e)
    {
        pnewrow = (GridViewRow)PartList.Rows[e.Row.RowIndex];
        pnewrow.BackColor = Color.Blue;
        pnewrow.ForeColor = Color.White;
        if (poldrow != null)
        {
            poldrow.BackColor = Color.Empty;
            poldrow.ForeColor = Color.Black;
        }
        poldrow = pnewrow;
    }

但是,poldrow 对象在回发后总是重置为空(单击会导致回发)。有没有办法在回发之间保存行索引?或者,是否有更好的方法来实现此功能?

谢谢

4

3 回答 3

2

当然可以将 oldRow(index) 存储在服务器上。例如,您可以使用ViewStateSession var。但是imo到服务器还有很长的路要走, 只是为了改变一行的颜色/样式。所以我建议使用 JQuery 来改变 row 的样式,除非你必须注意服务器上的 rowClicked 事件?!

<script type="text/javascript" src="js/jquery-1.7.1.js"></script>
<script type="text/javascript">
    var oldRow = null;
    var newRow = null;
    $(document).ready(function () {
        // gvProducts is my gridView
        $("#gvProducts tr:gt(0)").click(function () {
            oldRow = newRow;
            newRow = $(this);

            newRow.css("background-color", "blue");
            newRow.css("color", "white");

            if (oldRow != null) {
                oldRow.css("background-color", "transparent");
                oldRow.css("color", "black");
            }
        });
    });
</script>

使用此脚本,您将留在客户端上,并且您的客户端不必为了设置样式而回发到服务器!

于 2012-09-12T19:36:58.883 回答
1

您可以将值存储在ViewStateor中Session

public int CurrentRowIndex
{
    get
    {
        return ViewState["rowindex"] != null ?
               int.Parse(ViewState["rowindex"]) :
               0;
    }

    set
    {
        ViewState["rowindex"] = value;
    }
}
于 2012-09-12T18:57:19.747 回答
0

您可以简单地将索引保存到会话或视图状态或 cookie 中!并在回发后使用该值来检索您想要的内容!

放 :

Session["rowindex"]="the index";

得到 :

string index=Session["rowindex"].ToString();
于 2012-09-12T18:59:29.707 回答