您的位置:首页 > 其它

GridView 翻页后保持checkbox选中状态

2010-08-14 00:13 507 查看
protected void gvBuyKey_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
ViewState["Page" + gvBuyKey.PageIndex.ToString()] = null;//必须先清空一下,否则会重复记录
foreach (GridViewRow gvr in gvBuyKey.Rows)
{
CheckBox check = gvr.FindControl("ItemCheckBox") as CheckBox;

if (check.Checked)
{
ViewState["Page" + gvBuyKey.PageIndex.ToString()] += ";"+gvr.DataItemIndex; //所有页被check的索引
}
}
BindKey(e.NewPageIndex); //翻页后绑定新的页
if (ViewState["Page" + gvBuyKey.PageIndex.ToString()] != null)
{
string s = ViewState["Page" + gvBuyKey.PageIndex.ToString()].ToString().TrimStart(';');
string[] iIndex = s.Split(new char[] { ';' });
foreach (string eveIndex in iIndex)
{
int index = Convert.ToInt32(eveIndex) % gvBuyKey.PageSize;
(gvBuyKey.Rows[index].Cells[3].FindControl("ItemCheckBox") as CheckBox).Checked = true;
}
}
}
说明一下:
写在了换页之前的事件里,每次翻页后都会执行;
每页都有自己的一个ViewState来存放状态,形如ViewState["Page"+gridviewq.PageIndex.ToString()];
在开始处需要清空一下此页的ViewState,否则如果选中后翻页又返回来取消选中后再翻页那个依然是选中状态;
先将行号存到ViewState里,然后再遍历出来。
这只从视觉效果上达到了保持选中的状态了,如果要提交选中行的id,则还需要用一个ViewState来保存一下:
首先将gridview每行的id存到相应的checkbox的一个属性里,而这里是存到了ToolTip属性里(没有发现其它可以存字符串而又不在页面上显示出来的属性,其实ToolTip也显示出来了--!),这些写在RowDataBound事件里,即
protected void gvBuyKey_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
CheckBox mycheckBox = (CheckBox)e.Row.Cells[3].FindControl("ItemCheckBox");
if (mycheckBox != null)
{
mycheckBox.ToolTip = gvBuyKey.DataKeys[e.Row.DataItemIndex % gvBuyKey.PageSize].Value.ToString();
}
}
}
然后根据checkbox的选中状态对ViewState进行存取。这样就得在checkbox的checkchanged的事件里写了,当然AutoPostBack的属性就得设为true了。
protected void ItemCheckBox_CheckedChanged(object sender, EventArgs e)
{
if (((CheckBox)sender).Checked)
{
if (ViewState["newId"] != null)
{
if (!ViewState["newId"].ToString().Contains(";" + ((CheckBox)sender).ToolTip + ";"))//判断是否已经存过,如果已经有了就不应该往里存了
{
ViewState["newId"] += ((CheckBox)sender).ToolTip + ";";
}
}
else
{
ViewState["newId"] = ";" + ((CheckBox)sender).ToolTip + ";";

}
}
else
{
if (ViewState["newId"].ToString().Contains(";" + ((CheckBox)sender).ToolTip + ";"))
{
//去掉曾经选中而又取消选中了的ID,方便做法是用分号代替了,把它分解为数组时也方便了。
ViewState["newId"] = ViewState["newId"].ToString().Replace(";" + ((CheckBox)sender).ToolTip + ";", ";");
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: