原理:
1、设置GridView的DataKeyNames。
2、把选择的项的值放到ViewState中。
下面是部分代码:
aspx页:
// -->
</<script>
<asp:GridView ID="MainGridView" runat="server"
AutoGenerateColumns="False" Width="100%"
OnRowDataBound="MainGridView_RowDataBound" DataKeyNames="id">
<!--这个DataKeyNames可以是多个值,DataKeyNames="id,name,tel"-->
<Columns>
<asp:TemplateField>
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</EditItemTemplate>
<HeaderTemplate>
<asp:CheckBox ID="chkSelectAll"
runat="server" ToolTip="选择全部" onclick="javascript:SelectAll(this);" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
<asp:BoundField HeaderText="序号">
<HeaderStyle Wrap="False" />
<ItemStyle HorizontalAlign="Center"/>
</asp:BoundField>
<asp:BoundField DataField="用户编号" HeaderText="用户编号">
<HeaderStyle Wrap="False" />
</asp:BoundField>
</Columns>
</asp:GridView>
aspx.cs页:
ViewState["SelectID"] = value;
}
}
/// <summary>
/// 设置选中的值
/// </summary>
private void SetSelectID()
{
//从ViewState获取存放选择过的CheckBox值
IList<string> _ArrID = SelectID;
//遍历GridView获取当前选过的CheckBox值
for (int i = 0; i < this.MainGridView.Rows.Count; i++)
{
//取当前行的CheckBox
CheckBox _CheckBox =
(CheckBox)this.MainGridView.Rows[i].FindControl("chkSelect");
//取当前行的值
string _Temp = this.MainGridView.DataKeys[i].Values.ToString();
//如果当前行的CheckBox已选中
if (_CheckBox.Checked)
{
//如果ViewState中还没有存放该值,则存放进去
if (!_ArrID.Contains(_Temp))
{
_ArrID.Add(this.MainGridView.DataKeys[i].Values[0].ToString();//这里根据实际页面的那个DataKeyNames来确定
}
}
//如果当前行的CheckBox没有选中
else
{
//判断ViewState中是否存放了该值,如果存放过,刚移除掉
if (_ArrID.Contains(_Temp))
{
_ArrID.Remove(_Temp);
}
}
}
SelectID = _ArrID;
}
/// <summary>
/// MainGridView事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void MainGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//取当前行的值
string _Temp = this.MainGridView.DataKeys[e.Row.RowIndex].Value.ToString();
//取当前行的CheckBox
CheckBox _CheckBox = (CheckBox)e.Row.FindControl("chkSelect");
//如果当前行的值出现在ViewState中,刚把该CheckBox设置为选中状态
if (SelectID.Contains(_Temp))
{
_CheckBox.Checked = true;
}
}
}
在翻页按钮事件中 调用一下SetSelectID(); 这个 //在选择处理后的按钮中也要调用。