asp.net控件的分页批量全选删除

第一步:访问数据是做程序必不可少的一步。首先创建SQL ServerManagement Studio2005使用脚本创建名为“MyBookDB”的数据库!脚本如下:

具体代码如下:

use master

go

if exists(select * from sys.databases wherename = 'MyBookDB')

 drop database MyBookDB

go

 

create database MyBookDB

on primary

(

  name = 'MyBookDB',

  fileName = 'C:\MyBookDB.mdf'

)

log on

(

  name = 'MyBookDB_log',

  filename = 'C:\MyBookDB.ldf'

)

go

 

 

use MyBookDB

go

 

if exists(select * from sys.objects wherename='Book')

 droptable Book

go

create table Book

(

 BookID int identity(1,1) not null,

 Title nvarchar(50) not null,

 AuthorName varchar(50) not null,

 Publish nvarchar(100) not null,

 Price float not null,

 PubDate datetime not null

);

 

alter table Book add constraint PK_BookIDprimary key(BookID);

alter table Book add constraint UQ_Titleunique(Title);

 

insert into Book values('C++程序设计','于公','清华大学出版社',35.6,'2007-12-01 10:26:00')

insert into Book values('Basic语言程序设计','刘伟','清华大学出版社',25.1,'2005-09-01 16:15:00')

insert into Book values('操作系统原理','张维民','高等教育出版社',29.3,'2006-01-02 09:30:00')

insert into Book values('ASP.NET3.5开发指南','谢敏','科学出版社',56.8,'2008-08-08 08:30:00')

insert into Book values('Java编程思想','黄超','机械工业出版社',65.6,'2006-09-05 12:30:00')

insert into Book values('UML2.0学习指南','李健','清华大学出版社',32.5,'2007-08-15 13:00:45')

 

具体效果如图:


插入几条测试数据:


OK,查询一下数据库,如图:


第二步:由于本人是用Linq作为数据访问,选中项目,右击,在弹出的下拉选项中选择“添加新项(W)….”,

之后在弹出的对话框中选择“LINQto SQL类”模板,在名称文本框中输入Book.dbml,

点击 “添加”,接着会弹出如下的对话框:


我们一般在不采用分层的情况下,数据文件通常会放在 “App_Code”文件夹,便于管理,所以我们选择“是(Y)”,整个项目的效果如下:


第三步:点击Book.dbml文件中的“服务器资源管理器”,


或者选择“视图”菜单,找到“服务器资源管理器(V)  Ctrl+W,L”选项,


也可以按住快捷键“Ctrl+Alt+S”,打开“服务器资源管理器”视图,如图所示:


右键单击“数据库连接”,选择“添加连接(A)…”


在弹出的对话框中选择“MicrosoftSQL Server”


单击“继续”后,出现”添加连接”对话框,由于登录数据库时,是以本机作为服务器,以Windows身份进行登录,所以在“服务器名”下拉框中键入英文点“.”,代表本机,在“登录到服务器”组中,选择“使用Windows身份验证(W)”单选按钮,在“连接到一个数据库”组中,选择“选择或输入一个数据库名(D):”单选按钮,在下拉框选项中选择“MyBookDB”数据库,

单击“测试连接(T)”,测试连接成功!


,单击“确定”→“确定”,后展开数据库下的表,


将整个表拖放至“App_Code/Book.dbml”文件中。

第三部,进行正式的手动编码!

前台“Default.aspx”页面中的代码如下:


具体为:

<%@ PageLanguage="C#"AutoEventWireup="true"EnableEventValidation="false"  CodeFile="Default.aspx.cs" Inherits="_Default"%>

<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

    <style type="text/css">

      div

      {

         font-size:13px;

         text-align:center;

      }

      a

      {

         text-decoration:none;

         color:#666;

      }

    </style>

   

</head>

<body>

    <form id="myform" runat="server">

    <asp:ScriptManager ID="smBook" runat="server">

    </asp:ScriptManager>

    <asp:UpdatePanel ID="upnlBook" runat="server">

       <ContentTemplate>

           <asp:LinkButton ID="btnDeleteAll" runat="server" Text="批量删除" OnClientClick="returnconfirm('您确定要删除吗?');"

               οnclick="btnDelete_Click"></asp:LinkButton>

               <br /><br />  

    <div>

        <asp:GridView ID="gvBook" runat="server" AutoGenerateColumns="False"

            Width="60%" onrowcreated="gvBook_RowCreated">

            <Columns>

                <asp:TemplateField>

                     <HeaderTemplate>

                         <asp:CheckBox ID="chkHeader"runat="server"oncheckedchanged="chkHeader_CheckedChanged"AutoPostBack="true"/>

                     </HeaderTemplate>

                     <ItemTemplate>

                         <asp:CheckBox ID="chkItem"runat="server"oncheckedchanged="chkItem_CheckedChanged"AutoPostBack="true"/>

                     </ItemTemplate>

                </asp:TemplateField>

               <asp:TemplateField HeaderText="编号">

                     <ItemTemplate>

                         <asp:Label ID="lblNo" runat="server"Text='<%#Eval("BookID")%>'></asp:Label>

                     </ItemTemplate>

                </asp:TemplateField>

                <asp:BoundField DataField="Title" HeaderText="书名" />

                <asp:BoundField DataField="AuthorName" HeaderText="作者"/>

                <asp:BoundField DataField="Publish" HeaderText="出版社" />

                <asp:BoundField DataField="Price" HeaderText="价格" />

                <asp:BoundField DataField="PubDate" HeaderText="出版时间" />

            </Columns>

            <SelectedRowStyle BackColor="#D1DDF1" ForeColor="#333333" Font-Bold="True" />

            <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />

            <HeaderStyle BackColor="#99C89D"Font-Bold="True"ForeColor="White"/>

            <AlternatingRowStyle BackColor="White" />

            <RowStyle BackColor="#EFF3FB" />

        </asp:GridView>

    </div>

    <div style="margin-top:5px;">

        <asp:LinkButton ID="btnFirst" runat="server" Text="首页" οnclick="btnFirst_Click"></asp:LinkButton>

        <asp:LinkButton ID="btnPrev" runat="server" Text="上一页" οnclick="btnPrev_Click"></asp:LinkButton>

        <asp:LinkButton ID="btnNext" runat="server" Text="下一页" οnclick="btnNext_Click"></asp:LinkButton>

        <asp:LinkButton ID="btnLast" runat="server" Text="尾页" οnclick="btnLast_Click"></asp:LinkButton>

    </div>

    第<asp:Label ID="lblCurrent"runat="server"Text="1"ForeColor="Red"></asp:Label>页&nbsp;

  共<asp:Label ID="lblTotalPage"runat="server"ForeColor="Red"></asp:Label>页

          </ContentTemplate>

    </asp:UpdatePanel>

    </form>

</body>

</html>

注意:页面中要设置每个复选框的AutoPostBack属性为true.

Default页面的后台代码如下:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Web;

using System.Web.UI;

usingSystem.Web.UI.WebControls;

 

public partial class _Default : System.Web.UI.Page

{

    BookDataContextdataContext = new BookDataContext();

 

    protected void Page_Load(objectsender, EventArgs e)

    {

        if(!IsPostBack)

        {

            ShowAllBooks();

            ViewState.Clear(); //清空ViewState中的所有项

        }

    }

 

    /// <summary>

    /// 显示所有书本信息

    /// </summary>

    private void ShowAllBooks()

    {

        IList<Book> books = dataContext.Book.ToList<Book>();    //通过Linq的ToList<T>操作符,获取数据库中所有图书的集合

        PagedDataSourcepagedDataSource = new PagedDataSource();//声明一个PagedDataSource分页类

        pagedDataSource.DataSource =books;                      //将PagedDataSource的DataSource属性设置为books集合

        pagedDataSource.AllowPaging = true;                      //允许分页

        intcurrentPage = Convert.ToInt32(lblCurrent.Text)- 1;  //获取当前的页数,再减去一,因为PagedDataSource的当前页是像从0开始

        pagedDataSource.CurrentPageIndex =currentPage;          //为pagedDataSource指定当前页

        pagedDataSource.PageSize = 2;                            //设置每页显示记录数,这里设置2条,读者可以根据自己的需要进行设置

        lblTotalPage.Text =pagedDataSource.PageCount.ToString();//获取总页数

        btnFirst.Enabled = true;      //将“首页”按钮设置为启用状态

        btnNext.Enabled = true;       //将“下一页”按钮设置为启用状态

        btnPrev.Enabled = true;       //将“上一页”按钮设置为启用状态

        btnLast.Enabled = true;       //将“尾页”按钮设置为启用状态

        if(pagedDataSource.IsFirstPage) //如果当前是第一页

        {

            btnFirst.Enabled = false; //禁用“首页”按钮

            btnPrev.Enabled = false;  //禁用“上一页”按钮

        }

        if(pagedDataSource.IsLastPage)   //如果当前是最后一页

        {

            btnNext.Enabled = false;      //禁用“下一页”按钮

            btnLast.Enabled = false;      //禁用“尾页”按钮

        }

        if(books.Count > 0)   //如果数据库中有记录

            gvBook.DataSource =pagedDataSource; //则为GridView控件指定数据源

        gvBook.DataBind(); //调用DataBind()方法,对数据进行绑定

        AddValue();

    }

 

 

    /// <summary>

    /// 为GridView模板中的每个复选框添加一个Id属性,用于进行唯一标识

    /// </summary>

    private void AddValue()

    {

        foreach(GridViewRow row ingvBook.Rows)   //遍历GridView中的每一行

        {

            CheckBoxbox = (CheckBox)row.FindControl("chkItem"); //获取项模版中的每一个复选框

            LabellblNo = (Label)row.FindControl("lblNo");       //获取每一项中的保存图书编号的Label标签

            if(box != null && lblNo != null)

            {

                stringbookId = lblNo.Text;       //获取图书的编号

                box.Attributes.Add("id", bookId); //为复选框添加一个自定义的id属性,属性值为当前的图书编号

 

                IList<int> idArray = newList<int>();  //声明一个变量,保存选中的所有的图书编号的集合

                if(ViewState["BookIDArray"] != null)

                    idArray = (List<int>)ViewState["BookIDArray"];

                if(idArray.Contains(Convert.ToInt32(bookId))) //如果图书编号的集合中保存有当前的图书编号

                    box.Checked = true;       //则将当前的复选框设置为选中状态

                else

                    box.Checked = false;      //否则设置为不选中

            }

        }

    }

 

    /// <summary>

    /// 单击“首页”按钮,显示第一页的数据

    /// </summary>

    protected void btnFirst_Click(objectsender, EventArgs e)

    {

        lblCurrent.Text = "1"; //将当前的页数设置为1

        ShowAllBooks(); //调用显示所有图书信息的方法

    }

 

    /// <summary>

    /// 单击“上一页”按钮,显示上一页的数据

    /// </summary>

    protected void btnPrev_Click(objectsender, EventArgs e)

    {

        intcurrentPage = Convert.ToInt32(lblCurrent.Text);//获取当前的页数

        if(currentPage <= 1)     //如果当前的页数小于或者等于1

            currentPage = 2;      //则将当前的页数设置为2

        currentPage = currentPage - 1; //将当前的页数在原来的基础上减去1

        lblCurrent.Text =currentPage.ToString(); //将当前的页数显示在页面的lblCurrent控件中

        ShowAllBooks(); //调用显示所有图书信息的方法

    }

 

    /// <summary>

    /// 单击“下一页”按钮,显示下一页的数据

    /// </summary>

    protected void btnNext_Click(objectsender, EventArgs e)

    {

        intcurrentPage = Convert.ToInt32(lblCurrent.Text);//获取当前的页数

        inttotalPage = Convert.ToInt32(lblTotalPage.Text);//获取总页数

        if(currentPage >= totalPage)//如果当前的页数大于或者等于总页数

            currentPage = totalPage - 1; //则将当前的页数设置为总页数减1

        currentPage = currentPage + 1;   //将当前的页数在原来的基础上加上1

        lblCurrent.Text = currentPage.ToString();//将当前的页数显示在页面的lblCurrent控件中

        ShowAllBooks(); //调用显示所有图书信息的方法

    }

 

    /// <summary>

    /// 单击“尾页”按钮,显示最后一页的数据

    /// </summary>

    protected void btnLast_Click(objectsender, EventArgs e)

    {

        lblCurrent.Text = lblTotalPage.Text; //将当前页数设置为与总页数相等

        ShowAllBooks(); //调用显示所有图书信息的方法

    }

 

    /// <summary>

    /// GridView控件头部中的复选框的改变事件

    /// </summary>

    protected void chkHeader_CheckedChanged(object sender, EventArgs e)

    {

        boolisCheck = ((CheckBox)sender).Checked;   //获取复选框的选中状态

        if(isCheck)

        {

            //使用Linq的Select操作符,查询出数据库中所有图书编号的集合

            IList<int> idArray = dataContext.Book.Select(b =>b.BookID).ToList<int>();

            ViewState["BookIDArray"]= idArray;   //保存所有的图书编号

            ViewState["CheckMode"]= "CheckAll";  //当前为全选状态

            foreach(GridViewRow row ingvBook.Rows)   //遍历GridView中的每一行

            {

                CheckBoxbox = (CheckBox)row.FindControl("chkItem"); //获取每行中CheckBox控件

                if(box != null)

                    box.Checked = true;   //因为当前为“全选”状态,将行中的每一个复选框设置为“选中”状态

            }

        }

        else

        {

            ViewState.Remove("BookIDArray");         //清空图书编号的集合

            ViewState["CheckMode"]= "NotCheckAll";  //当前不是全选状态

            foreach(GridViewRow row ingvBook.Rows) //遍历GridView中的每一行

            {

                CheckBoxbox = (CheckBox)row.FindControl("chkItem"); //获取每行中CheckBox控件

                if(box != null)

                    box.Checked = false; //因为当前为“反选”状态,将行中的每一个复选框设置为“不选中”状态

            }

        }

    }

 

    /// <summary>

    /// GridView控件行中的复选框的改变事件

    /// </summary>

    protected void chkItem_CheckedChanged(objectsender, EventArgs e)

    {

        IList<int> idArray = newList<int>();    //声明一个变量,保存选中的图书编号的集合

        if(ViewState["BookIDArray"] != null)

            idArray = (List<int>)ViewState["BookIDArray"];

        intbookId = Convert.ToInt32(((CheckBox)sender).Attributes["id"]); //获取当前行中的图书的编号

        boolisChecked = ((CheckBox)sender).Checked; //获取当前行中的复选框是否为被选中的状态

        if(isChecked)        //如果当前行中的复选框被选中

        {

            if(idArray.Contains(bookId) == false)//如果图书编号集合中不包含当前选中的图书的编号

                idArray.Add(bookId);   //则往集合中添加该图书的编号

        }

        else        //如果当前行中的复选框没有被选中

        {

            if(idArray.Contains(bookId))//如果图书编号集合中包含当前选中的图书的编号

                idArray.Remove(bookId);  //则将该图书的编号从集合中删除

        }

        ViewState["BookIDArray"]= idArray; //将选中的图书编号的集合保存到ViewState["BookIDArray"]中

    }

 

    /// <summary>

    /// GridView控件的行的创建事件,在创建行时,判断是否是“全选”状态

    /// 如果是,则将头部模板中的复选框选中

    /// </summary>

    protected void gvBook_RowCreated(objectsender, GridViewRowEventArgs e)

    {

        if(ViewState["CheckMode"] != null)

        {

            stringmode = ViewState["CheckMode"].ToString();  //获取是否为“全选”状态的标识

            if(mode == "CheckAll")         //如果为全选状态

            {

                CheckBoxbox = (CheckBox)e.Row.FindControl("chkHeader"); //找到头部模板中的复选框

                if(box != null)

                {

                    box.Checked = true;  //将复选框置为选中的状态

                }

            }

        }

    }

 

    /// <summary>

    /// 单击"批量删除"按钮,删除选中的图书

    /// </summary>

    protected void btnDelete_Click(objectsender, EventArgs e)

    {

        if(ViewState["BookIDArray"] != null)

        {

            IList<int> array = (List<int>)ViewState["BookIDArray"];//获取选中的图书编号的集合

            if(array.Count > 0)

            {

                IList<int> removes = newList<int>();//声明一个变量,保存刚刚删除的图书编号的集合

               removes.Clear();   //清空集合中的所有项

                foreach(int bookId inarray)   //遍历得到每一本图书的编号

                {

                    DeleteBookByBookId(bookId);//删除图书的新明

                    removes.Add(bookId);        //往集合中添加刚刚删除的图书编号

                }

                lblCurrent.Text = "1";

                foreach(int bookId inremoves) //循环遍历每一本刚刚删除图书的编号

                {

                    array.Remove(bookId); //将图书的编号从选中的图书编号的集合中删除

                }

                if(array.Count < 1) //选中的图书编号的集合的元素个数小于1

                    ViewState.Remove("BookIDArray"); //清空选中的图书编号的集合

                ShowAllBooks();   //重新显示所有的图书信息

            }

        }

        else

            //如果用户没有选中任何图书,则弹出“选择”的提示对话框

            ScriptManager.RegisterStartupScript(this, typeof(string), "key","alert('请选择要删除的图书!');", true);

    }

 

    /// <summary>

    /// 根据图书的编号,删除图书的信息

    /// </summary>

    /// <paramname="bookId">图书的编号</param>

    private void DeleteBookByBookId(intbookId)

    {

        Bookbook = dataContext.Book.SingleOrDefault<Book>(b=> b.BookID == bookId); //根据图书的编号,获得图书实体对象

        if(book != null)  //如果该本图书不为空

        {

           dataContext.Book.DeleteOnSubmit(book); //通过Linq的DeleteOnSubmit操作符,将该图书丛数据库中删除

            dataContext.SubmitChanges();  //调用DataContext的SubmitChanges()方法,将数据提交到数据库中

        }

    }

}

Repeater、DataList控件的用法也大同大同小异,只是遍历控件的方法有所区别!

OK,收工,运行页面,如果所示:


读者可以根据自行测试!如有不足或错误之处欢迎您提出宝贵的建议,不胜感激,Thank You!

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值