经过测试可以使用的方法:
1、在gridview里边设置两个checkbox,均为服务器控件,postback不需要;如下面的代码
<asp:GridView ID="gvUsers" runat="server" AutoGenerateColumns="False"
DataKeyNames="ID">
<Columns>
<asp:TemplateField HeaderText="选择">
<HeaderTemplate>
<asp:CheckBox ID="CheckHeader" runat="server" value='<%#Eval("ID") %>' οnclick="SelectAll(this);"/>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="CheckItem" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="ID" HeaderText="编号" Visible="False" />
<asp:BoundField DataField="LoginName" HeaderText="用户名" />
<asp:BoundField DataField="LastLoginTime" HeaderText="上次登录时间" />
</Columns>
</asp:GridView>
2、加入javascript语句
<script language="javascript" type="text/javascript">
function SelectAll(tempControl)
{
//将除头模板中的其它所有的CheckBox取反
var theBox=tempControl;
xState=theBox.checked;
elem=theBox.form.elements;
for(i=0;i<elem.length;i++)
if(elem[i].type=="checkbox" && elem[i].id!=theBox.id)
{
if(elem[i].checked!=xState)
elem[i].click();
}
}
</script>
这样,就可以选择全选或者全不选了。
3、读取Gridview隐藏列的值
如1中代码,将隐藏列ID加入DataKeyNames
DataKeyNames="ID"
4、读取选中行的ID值,返回“,”间隔的字符串
protected void Button1_Click(object sender, EventArgs e)
{
string str = "";
for (int i = 0; i < gvUsers.Rows.Count; i++)
{
if (((CheckBox)gvUsers.Rows[i].Cells[0].Controls[1]).Checked)
{
str = str+gvUsers.DataKeys[i]["ID"].ToString()+",";
}
}
if (str.Length > 0) str = str.Remove(str.LastIndexOf(","), 1); //去除最后一个,
Response.Write(str);
}
可以获得列表 1,2,3,5,
然后使用去最后一个,的代码,就可以搞定了!