經過測試可以使用的方法:
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") %>' onclick="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,
然後使用去最後一個,的代碼,就可以搞定了!