我正在使用以下代码突出显示用户在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(单击会导致回发)。有没有办法在回发之间保存行索引?或者,是否有更好的方法来实现此功能?
由于
答案 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)
您可以将值存储在ViewState
或Session
:
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();