在Postback之间存储GridViewRow对象

时间:2012-09-12 18:50:35

标签: c# asp.net

我正在使用以下代码突出显示用户在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对象始终会重置为null(单击会导致回发)。有没有办法在回发之间保存行索引?或者,是否有更好的方法来实现此功能?

由于

3 个答案:

答案 0 :(得分:2)

当然可以将oldRow(index)存储在服务器上。例如,您可以使用 ViewState Session var 。但是imo 它离服务器很远,只需改变行的颜色/样式 。所以我建议使用JQuery来改变行的样式,除非你必须在服务器上注意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>

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

答案 1 :(得分:1)

您可以将值存储在ViewStateSession

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

    set
    {
        ViewState["rowindex"] = value;
    }
}

答案 2 :(得分:0)

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

设置:

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

获取:

string index=Session["rowindex"].ToString();