GridView中实现全选与取消全选,以便同时删除多条数据

  我们项目后台操作中不可避免的会有同时删除多项的操作,本文实现的就是当点击全选时,选定当前页中所有项,当取消了某一项的选定,则“全选”CheckBox的checked也为false;然后在后台中取到所选定的项的ID,实现同时删除多项的功能。
前台代码
 1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="NewsForm.aspx.cs" Inherits="Admin_NewsForm" %>
 2 
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4 
 5 <html xmlns="http://www.w3.org/1999/xhtml">
 6 <head runat="server">
 7     <title>无标题页</title>
 8     <script type="text/javascript" language="javascript">
 9 function isOrNotCheckAll(checkValue)
10 {
11     var arrAllCheckBoxes = document.getElementsByTagName("input");
12     //check all
13     if(checkValue==true)
14     {
15         for(i=0;i<arrAllCheckBoxes.length;i++)
16         {
17             if(document.getElementById(arrAllCheckBoxes[i].id).type=="checkbox")
18             {
19                 document.getElementById(arrAllCheckBoxes[i].id).checked=true;
20             }
21         }
22     }
23     //do not check any one 
24     if(checkValue==false)
25     {
26         for(i=0;i<arrAllCheckBoxes.length;i++)
27         {
28             if(document.getElementById(arrAllCheckBoxes[i].id).type=="checkbox")
29             {
30                 document.getElementById(arrAllCheckBoxes[i].id).checked=false;
31             }
32         }
33     }
34 }
35 function CBDeleteClick(clientID,checkAllClientID)
36 {
37     var arrAllCheckBoxes = document.getElementsByTagName("input");
38     //there has some one not be checked
39     if(document.getElementById(clientID).checked==false)
40     {
41         for(i=0;i<arrAllCheckBoxes.length;i++)
42         {
43             if(arrAllCheckBoxes[i].id.indexOf("CheckAll")!=-1)
44             {
45                 arrAllCheckBoxes[i].checked=false;
46             }
47         }
48     }
49 }
50     </script>
51 </head>
52 <body>
53     <form id="form1" runat="server">
54    <asp:Image ID="Image1" runat="server"  ImageUrl="HXImages/button/btn_add.gif" />
55     <asp:ImageButton ID="BtnDelete" runat="server" 
56         ImageUrl="~/Admin/HXImages/button/btn_del.gif" onclick="BtnDelete_Click" />
57     <asp:GridView ID="GVNews" runat="server" AutoGenerateColumns="False" DataKeyNames="newsID" 
58         Width="100%"  onrowdatabound="GVNews_RowDataBound" 
59         onrowdeleting="GVNews_RowDeleting" AllowPaging="True" 
60         onpageindexchanging="GVNews_PageIndexChanging" PageSize="3" >
61         <Columns>
62               <asp:TemplateField>
63               <HeaderTemplate>
64                     全选
65                     <asp:CheckBox ID="CheckAll" runat="server" OnClick="javascript: return isOrNotCheckAll (this.checked);" />
66               </HeaderTemplate>
67               <ItemTemplate>
68                   <asp:CheckBox ID="CBDelete" runat="server" />
69               </ItemTemplate>
70                   <ItemStyle HorizontalAlign="Center" />
71               </asp:TemplateField>
72               
73             <asp:BoundField DataField="newsID" HeaderText="序号" >
74                 <ItemStyle HorizontalAlign="Center" />
75             </asp:BoundField>
76             <asp:BoundField DataField="newsTitle" HeaderText="标题">
77                 <ItemStyle HorizontalAlign="Center" />
78             </asp:BoundField>
79             <asp:TemplateField HeaderText="添加日期">
80                 <ItemStyle HorizontalAlign="Center" />
81                 <ItemTemplate>
82                     <%# Convert.ToDateTime(Eval("newsDate")).ToString("yyyy-MM-dd")%>
83                 </ItemTemplate>
84             </asp:TemplateField>
85             <asp:BoundField DataField="newsDegree" HeaderText="点击次数(次)">
86                 <ItemStyle HorizontalAlign="Center" />
87             </asp:BoundField>
88             <asp:TemplateField HeaderText="操作">
89                     <ItemStyle HorizontalAlign="Center" />
90                     <ItemTemplate>
91                         <asp:ImageButton ID="ImgDel" title="删除" CommandName="delete" ImageUrl="HXImages/del.gif" runat="server" />
92                     </ItemTemplate>
93                 </asp:TemplateField>
94         </Columns>
95     </asp:GridView>
96     </form>
97 </body>
98 </html>
后台代码
 1 using System;
 2 using System.Collections;
 3 using System.Configuration;
 4 using System.Data;
 5 using System.Linq;
 6 using System.Web;
 7 using System.Web.Security;
 8 using System.Web.UI;
 9 using System.Web.UI.HtmlControls;
10 using System.Web.UI.WebControls;
11 using System.Web.UI.WebControls.WebParts;
12 using System.Xml.Linq;
13 
14 public partial class Admin_NewsForm : System.Web.UI.Page
15 {
16     string sql = null;
17     protected void Page_Load(object sender, EventArgs e)
18     {
19         if (!IsPostBack)
20         {
21             BindGVNews();
22             BtnDelete.Attributes.Add("onclick""return confirm('确定要删除吗?');");
23         }
24     }
25     void BindGVNews()
26     {
27         sql = string.Format("select * from newsTable order by newsID desc");
28         DataTable dt = DataBase.ExecuteDataSet(sql).Tables[0];
29         GVNews.DataSource = dt.DefaultView;
30         GVNews.DataBind();
31     }
32     protected void GVNews_RowDeleting(object sender, GridViewDeleteEventArgs e)
33     {
34         string newsID = GVNews.DataKeys[e.RowIndex].Value.ToString();
35         sql = string.Format("delete from newsTable where newsID={0}", Convert.ToInt32(newsID));
36         int i = DataBase.ExecuteNonQuery(sql);
37         if (i > 0)
38         {
39             BindGVNews();
40         }
41     }
42     protected void GVNews_PageIndexChanging(object sender, GridViewPageEventArgs e)
43     {
44         GVNews.PageIndex = e.NewPageIndex;
45         BindGVNews();
46     }
47     protected void GVNews_RowDataBound(object sender, GridViewRowEventArgs e)
48     {
49         if (e.Row.RowType == DataControlRowType.DataRow)
50         {
51             ((ImageButton)e.Row.FindControl("ImgDel")).Attributes.Add("onclick""return confirm('确定要删除吗?')");
52             ((CheckBox)e.Row.FindControl("CBDelete")).Attributes.Add("onclick""CBDeleteClick('"+((CheckBox)e.Row.FindControl("CBDelete")).ClientID+"')");
53         }
54     }
55     string GetDeleteIDs()
56     {
57         string IDs = null;
58         foreach (GridViewRow gvr in GVNews.Rows)
59         {
60             CheckBox cb = (CheckBox)gvr.FindControl("CBDelete");
61             if (cb.Checked)
62             {
63                 if (IDs == null)
64                 {
65                     IDs = GVNews.DataKeys[gvr.RowIndex].Value.ToString();
66                 }
67                 else
68                 {
69                     IDs = IDs+"," + GVNews.DataKeys[gvr.RowIndex].Value.ToString();
70                 }
71             }
72         }
73         return IDs;
74     }
75     protected void BtnDelete_Click(object sender, ImageClickEventArgs e)
76     {
77         string newsIDs = this.GetDeleteIDs();
78         if (newsIDs != null)
79         {
80             sql = string.Format("delete from newsTable where newsID in ({0})", newsIDs);
81             int i = DataBase.ExecuteNonQuery(sql);
82             if (i > 0)
83             {
84                 BindGVNews();
85             }
86         }
87         else
88         {
89             Response.Write("<script>alert('请指定要删除的项!');</script>");
90         }
91     }
92 }
原文地址:https://www.cnblogs.com/lotuslove/p/1664819.html