用jQuery控制checkbox的时候,最好是用1.8.3版本,我开始用1.9.1时,只能选择或取消一次,之后即使设置是成功的,但在页面上不会显示出来,用1.8.3没有这个问题
引用脚本,用到的脚本下载地址:http://ishare.iask.sina.com.cn/f/37059723.html
<script src="jquery-1.8.3.min.js"></script>
删除按钮,这个按钮调用客户端事件checkNum(),这个事件检查checkbox的选择个数
<asp:Button ID="BtDel" runat="server" Text="删除选中的记录" OnClick="BtDel_Click" OnClientClick="return checkNum();" />
GridView代码,用的是HTML控件,蓝色和红色代码,取其中一个就可以了,他们的不同在于蓝色用了runat="server",把HTML控件转成了服务器端控件,所以在后台取数据的时候,有点不同
<asp:GridView ID="GridView1" runat="server" DataKeyNames="LogID" AutoGenerateColumns="False" OnDataBound="GridView1_DataBound">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<input type="checkbox" class="check-all" />
</HeaderTemplate>
<ItemTemplate>
<input type="checkbox" id="CheckOne" class="check-one" runat="server" value='<%# Eval("LogID") %>' />
<input type="checkbox" name="CheckOne" class="check-one" value='<%# Eval("LogID") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
jQuery脚本
蓝色的脚本用于控制全选、全消,是把给设置了class="check-all"的控件添加click事件,在这个事件里,把所有设置了class="check-one"的控件的checked属性,设置成和被点击的控件相同
在这里,要注意的是,如果用的是1.91.版本的脚本,所有checkbox控件都要先设置checkbox属性,否则$(this).prop("checked")得出来的结果会是undefine,因为我用的是1.8.3版本,所以上面在GridView的代码中,没有设置这个属性,也避免了只允许一次设置的问题
红色的脚本好像没意义,当设置了class="check-one"的控件被点击时,把自己当前的checked属性,设置回给自己。。。好像一点意义都没有,就是,这段代码是我最后加上的,因为在后面的checkNum()里,如果不设置这一句,length的值永远是0
红色脚本里注释了一句alert,当点击checkbox时,会报出来当前的选中状态,就是,如果不把这个选中状态回设,后面就取不出来了
绿色的脚本就把设置了class="check-one"的checkbox控件,又设置了checked属性的所有控件取到一个集合里,这个集合的length值,就是选中的控件的个数了
<script type="text/javascript">
$(document).ready(function () {
$(".check-all").click(function () {
$(".check-one").attr("checked", $(this).prop("checked"));
});
$(".check-one").click(function () {
//alert($(this).prop("checked"));
$(this).attr("checked", $(this).prop("checked"));
});
});
function checkNum() {
if(!confirm("确实要删除选中的记录吗?")) return false;
if ($("input[type='checkbox'][class='check-one'][checked]").length == 0) {
alert("请先选择要删除的记录");
return false;
}
return true;
}
</script>
在cs文件中,可以这样取值
对应GridView里蓝色的代码,即设置了runat="server"的代码
StringBuilder sb = new StringBuilder("");
string[] keys = Request.Form.AllKeys;
foreach (string key in keys)
{
if (key.StartsWith("ctl00$Cph$GridView1$ctl"))
{
sb.AppendLine("delete from Logs where LogID = " + Request.Form[key]);
}
}
if (String.IsNullOrEmpty(sb.ToString()))
{
Response.Write("请先选择要删除的记录");
return;
}
Response.Write(sb.ToString());
对应GridView里红色的代码
string commandTxt = "delete from Logs where LogID in ({0})";
if (String.IsNullOrEmpty(Request.Form["CheckOne"]))
{
Response.Write("请先选择要删除的记录");
return;
}
commandTxt = String.Format(commandTxt, Request.Form["CheckOne"]);
Response.Write(commandTxt);