在GridView中添加模板列 模板列里添加CheckBox后,GridView翻页会把其他页选择项清除掉,是因为没有保存状态。想了想大概思路是这样的 用一个数组类的东西保存所选择的项。这里用到了集合。
下面的是在网上找到的 转下
using System.Collections.Generic;
protected string sentence = "";
protected int result = 0;
protected Connection sqlCon = null;
protected bool changed = false;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnOK_Click(object sender, EventArgs e)
{
if (!changed)
{
GetSelectedItem();
}
foreach (string id in (List<string>)this.SelectedItems)
{
}
}
protected List<string> SelectedItems
{
get { return ViewState["selecteditems"] != null ? (List<string>)ViewState["selecteditems"] : null; }
set { ViewState["selecteditems"] = value; }
}
private void GetSelectedItem()
{
List<string> selecteditems = null;
if (this.SelectedItems == null)
{
selecteditems = new List<string>();
}
else
{
selecteditems = this.SelectedItems;
}
//获取选择的记录
for (int i = 0; i < this.gdvNews.Rows.Count; i++)
{
CheckBox cbx = (CheckBox)this.gdvNews.Rows[i].FindControl("ckbSelect");
string id = this.gdvNews.Rows[i].Cells[1].Text;
if (selecteditems.Contains(id) && !cbx.Checked)
selecteditems.Remove(id);
if (!selecteditems.Contains(id) && cbx.Checked)
selecteditems.Add(id);
}
this.SelectedItems = selecteditems;
}
protected void gdvNews_DataBinding(object sender, EventArgs e)
{
GetSelectedItem();
changed = true;
}
protected void gdvNews_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowIndex > -1 && this.SelectedItems != null)
{
CheckBox cbx = (CheckBox)e.Row.FindControl("ckbSelect");
string id = this.gdvNews.DataKeys[e.Row.RowIndex].Values[0].ToString();
if (SelectedItems.Contains(id))
cbx.Checked = true;
else
cbx.Checked = false;
}
}