首页蓝耳朵|小小蓝耳朵广州图书馆外文室英语儿童读物资源介绍网佛教青年之友旧版收集永硕E盘Phonics Short Vowels Game 
使用jQuery控制GridView中的checkbox全选、全消、并获取已选择的个数
所属栏目:ASP.NET(webform)  时间:2013-05-17 14:55  作者:狼子

用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);

 

小楼宝宝的涂鸦花花(Imitater)的博客起名称骨测字