在GridView与数据库进行绑定后,由得到的数据记录可能有许多条,以至一个页面无法容纳,这时需要进行多页显。

要实现分页显现,只要使用分页类 "PagedDataSource" 或者只对GridView的AllowPaging属性设为true。即可

一般情况下,如下代码可以实现分页显示。   //使第一种方法:PagedDataSource类加上Linq技术来实现

//页面代码:--------------------------------

<table cellpadding="0" cellspacing="0" class="style2" border="1" style="margin-left: 100px;">
        <tr class="style3" style="background-color: #659ACE">
            <td colspan="2">
                &gt;&gt;<span class="style4">创建地址本</span>
                <asp:Label ID="lblsuccedd" runat="server" Style="margin-left: 400px" ForeColor="Red"></asp:Label>
            </td>
        </tr>
        <tr class="style3">
            <td class="style9">
                &nbsp;&nbsp; 地址本名称:
            </td>
            <td class="style8">
                <asp:TextBox ID="txtBookName" runat="server" Width="211px"></asp:TextBox>
                <asp:Button ID="BtnCreateBook" runat="server" Text="创建" Width="49px" Style="margin-left: 40px;"
                    OnClick="BtnCreateBook_Click" />
                <asp:RequiredFieldValidator ID="RFValiTotxtBookName" runat="server" Display="Dynamic"
                    ControlToValidate="txtBookName" ErrorMessage="地址本名不能为空!" Style="margin-left: 100px"></asp:RequiredFieldValidator>
            </td>
        </tr>
        <tr class="style3">
            <td class="style10">
                &nbsp;&nbsp; 备注:
            </td>
            <td class="style6">
                <asp:TextBox ID="txtRemark" runat="server" Height="82px" TextMode="MultiLine" Width="213px">这家伙什么也没有留下!</asp:TextBox>
            </td>
        </tr>
        <tr class="style3">
            <td class="style10">
                &nbsp;&nbsp; 选择联系人:
            </td>
            <td class="style5">
                <asp:GridView ID="GVShow" runat="server" AutoGenerateColumns="False" Width="100%"
                    BackColor="White" BorderColor="White" BorderStyle="Ridge" BorderWidth="2px" CellPadding="3"
                    CellSpacing="1" GridLines="None" DataKeyNames="Userid" PageSize="5">
                    <RowStyle BackColor="#DEDFDE" ForeColor="Black" />
                    <Columns>
                        <asp:TemplateField ItemStyle-Width="50px" HeaderStyle-Width="50px">
                            <HeaderTemplate>
                                <input id="CheckAll" type="checkbox" onclick="CheckBoxAll();" />
                            </HeaderTemplate>
                            <ItemTemplate>
                                <center>
                                    <asp:CheckBox ID="userCheck" runat="server" onclick="ForCheckBox();" />
                                </center>
                            </ItemTemplate>
                            <HeaderStyle Width="50px"></HeaderStyle>
                            <ItemStyle Width="50px"></ItemStyle>
                        </asp:TemplateField>
                        <asp:TemplateField>
                            <HeaderTemplate>
                                登陆名
                            </HeaderTemplate>
                            <ItemTemplate>
                                <%# eval_r("LoginName") %>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField>
                            <HeaderTemplate>
                                昵称
                            </HeaderTemplate>
                            <ItemTemplate>
                                <%# eval_r("UserName") %>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField>
                            <HeaderTemplate>
                                性别
                            </HeaderTemplate>
                            <ItemTemplate>
                                <%# WebHelp.StrSex(eval_r("UserSex").ToString()) %>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField>
                            <HeaderTemplate>
                                电话
                            </HeaderTemplate>
                            <ItemTemplate>
                                <%# eval_r("UserPhone") %>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                    <FooterStyle BackColor="#C6C3C6" ForeColor="Black" />
                    <PagerStyle BackColor="#C6C3C6" ForeColor="Black" HorizontalAlign="Right" />
                    <SelectedRowStyle BackColor="#9471DE" Font-Bold="True" ForeColor="White" />
                    <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#E7E7FF" />
                    <EmptyDataTemplate>
                        没有任何注册用户信息
                    </EmptyDataTemplate>
                </asp:GridView>
            </td>
        </tr>
        <tr>
            <td colspan="2" align="center">
                <asp:Button ID="btnPageTop" runat="server" Text="上一页" OnClick="btnPageTop_Click"
                    CausesValidation="false" />
                <asp:Button ID="btnPageDec" runat="server" Text="下一页" OnClick="btnPageDec_Click"
                    CausesValidation="false" />
                <asp:DropDownList ID="drpList" runat="server">
                </asp:DropDownList>
                <asp:Button ID="btnPages" runat="server" Text="跳转" OnClick="btnPages_Click" CausesValidation="false" />
                &nbsp;&nbsp; 第<asp:Label ID="lblPageCurrent" runat="server" Text="1"></asp:Label>
                页 / 共<asp:Label ID="lblPageCount" runat="server" Text=""></asp:Label>
                页
            </td>
        </tr>
    </table>

//底层逻辑---------------------------     //使第一种方法:PagedDataSource类加上Linq技术来实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Common_CreateAddressBook : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindGridView();
            // 注意一定要先  将Session["check"]转换成List<String> 类型
            Session["check"] = new List<String>();
        }
    }

//绑定GridView
    private void BindGridView()
    {
        //Linq To Sql
        DataClassesDataContext dc = new DataClassesDataContext();
        var dome = from info in dc.Userinfo where info.Roleid == 0 select info;
        //分页类
        PagedDataSource pds = new PagedDataSource();
        //打开分页功能
        pds.AllowPaging = true;
        //数据源
        pds.DataSource = dome.ToList();
        //每页显示数据
        pds.PageSize = 5;
        //当前页
        pds.CurrentPageIndex = int.Parse(lblPageCurrent.Text) - 1;
        //显示总页数
        lblPageCount.Text = pds.PageCount.ToString();
        //在下拉列表中添加数据
        drpList.Items.Clear();
        for (int i = 1; i <= pds.PageCount; i++)
        {
            drpList.Items.Add(i.ToString());
        }
        //同步当前页
        drpList.SelectedIndex = int.Parse(lblPageCurrent.Text) - 1;
        //按钮问题
        btnPageTop.Enabled = true;
        btnPageDec.Enabled = true;
        if (lblPageCurrent.Text == "1")
        {
            btnPageTop.Enabled = false;
        }
        if (lblPageCurrent.Text == (pds.PageCount).ToString())
        {
            btnPageDec.Enabled = false;
        }
        GVShow.DataSource = pds;
        GVShow.DataBind();

SelectCheckBoxKeep();

}

//上一页
    protected void btnPageTop_Click(object sender, EventArgs e)
    {
        PageKeepCheckBox();
        lblPageCurrent.Text = (int.Parse(lblPageCurrent.Text) - 1).ToString();
        BindGridView();
    }
    //下一页
    protected void btnPageDec_Click(object sender, EventArgs e)
    {
        PageKeepCheckBox();
        lblPageCurrent.Text = (int.Parse(lblPageCurrent.Text) + 1).ToString();
        BindGridView();
    }
    protected void btnPages_Click(object sender, EventArgs e)
    {
        PageKeepCheckBox();
        lblPageCurrent.Text = drpList.Text;
        BindGridView();
    }

/// <summary>
    /// GridView翻页与checkbox保持功能的实现     当点击翻页时保存数据发生
    /// </summary>
    private void PageKeepCheckBox()
    {
        List<string> lis = new List<string>();
        lis = Session["check"] as List<String>;
        string str = "";
        //循环GridView中的每一行
        foreach (GridViewRow item in GVShow.Rows)
        {
            //取出DataKeyNames中绑定的数据    (DataKeys是取出DataKeyNames中的数据)
            str = (GVShow.DataKeys[item.RowIndex].Value).ToString();
            //查找每一行中的CheckBox按钮
            CheckBox Check = item.FindControl("userCheck") as CheckBox;

//如果行中的CheckBox被选中,将选中的数据放到List中去
            if (Check.Checked)
            {
                //当List中不包含此数据
                if (!lis.Contains(str))
                {
                    lis.Add(str);
                }
            }
            //否则移除
            else
            {
                if (lis.Contains(str))
                {
                    lis.Remove(str);
                }
            }
        }

if (lis != null || lis.Count > 0)
        {
            Session["check"] = lis;
        }
    }

/// <summary>
    /// 将以前选中的所有项打上标记   在GridView显示之后发生
    /// </summary>
    private void SelectCheckBoxKeep()
    {
        int i = 0;
        //得到Session["check"]
        List<String> lis = Session["check"] as List<String>;
        //如果lis中有数据
        if (lis != null && lis.Count > 0)
        {
            foreach (GridViewRow item in GVShow.Rows)
            {
                i = Convert.ToInt32(GVShow.DataKeys[item.RowIndex].Value);
                //如果lis中包含此数据,就设置本行中的CheckBox控件为选中
                if (lis.Contains(i.ToString()))
                {
                    CheckBox check = item.FindControl("userCheck") as CheckBox;
                    check.Checked = true;
                }
            }
        }

}
}

实现GridView翻页并且实现CheckBox选中功能的保持的更多相关文章

  1. easyUI datagrid中checkbox选中事件以及行点击事件,翻页之后还可以选中

    DataGrid其中与选择,勾选相关 DataGrid属性:singleSelect boolean 如果为true,则只允许选择一行. false ctrlSelect boolean 在启用多行选 ...

  2. GridView 翻页 索引超出范围

    事件回顾 今天GridView翻页时,又遇到错误:索引超出范围.必须为非负值并小于集合大小. 这是当时的PageIndexChanging和RowCommand两个事件的后台代码 protected ...

  3. flex布局构建大屏框架并支持翻页动画、滚动表格功能

      本文将利用flex属性构建大屏可视化界面.界面主要分标题栏.工具栏.数据可视化窗口.其中,翻页动画以及滚动表格功能分别分布在数据可视化界面两侧. 鼠标点击标题,可看到左侧窗口翻转动画: 整体布局效 ...

  4. bootstrap table 复选框选中后,翻页不影响已选中的复选框

    使用的 jquery版本为 2.1.1 在项目中发现bootstrap table的复选框选中后,翻页操作会导致上一页选中的丢失,api中的 bootstrapTable('getSelections ...

  5. react 使用antd的在图片列表或表格中实现点击其他元素Checkbox选中功能

    antd官网上的Checkbox功能只能单独使用,在表格中加入Checkbox也只能点击Checkbox按钮才能实现选中或取消功能 如果我们要实在表格行中点击或在图片列表中点击图片就能实现选中或取消, ...

  6. jQuery easyUI的datagrid,如何在翻页以后仍能记录被选中的行

    1.先给出问题解决后的代码 <%@ page language="java" import="java.util.*" pageEncoding=&quo ...

  7. 移动端翻页插件dropload.js(支持Zepto和jQuery)

    一. 声明 代码来源:github上的dropload项目. 二. 问题 dropload.js提供了最基本的上拉翻页,下拉刷新功能.对于由服务端一次返回所有数据的情况基本通用. 但是,需求往往不是服 ...

  8. 通过js实现整屏滑动+全屏翻页+动画展示+线性图

    技术:html+css+jquery+jquery-ui.js+jquery.fullPage.js   概述 本demo主要通过html+css+js实现整屏滑动,全屏翻页并带动画的功能效果,借助于 ...

  9. jq:翻页时,保存上页多选框checkbox选中状态

    这里主要讲一种:中间的 checkbox 是 通过Ajax调出的. 则翻页时,为了保存上页的选定状态,可在页面中定义一个变量,用来存储选中状态的值. <input class="cli ...

随机推荐

  1. 在线制作h5

    在线制作h5 官网:http://www.godgiftgame.com 在线制作h5首页预览效果图如下: 一.主要功能区域主要功能区域分布在上中左右三个地方,1.上面区域是功能选择区,包括图片素材. ...

  2. Linux64位服务器编译安装MySQL5.6(CentOS6.4)

    首先到MySQL官网下载MySQL最新版(目前是mysql-5.6.12)上传到服务器上,下面说一下详细的安装过程. 安装依赖包,可以在线更新也可以配置本地源(CentOS本地源配置)yum -y i ...

  3. 疑难杂症 - SQL语句整理

    一.关联子查询-查日期最新列 前天在工作中遇到一条非常有用的SQL语句,想了好久愣是没搞出来.今天将这个问题模拟出来:先看表 需求是,对于每个人,仅显示时间最新的那一条记录. 答案如下: select ...

  4. 初探设计:Java接口和抽象类何时用?怎么用?

    今天犯了个错: “接口变动,伤筋动骨,除非你确定只有你一个人在用”.哪怕只是throw了一个新的Exception.哈哈,这是我犯的错误. 一.接口和抽象类 类,即一个对象. 先抽象类,就是抽象出类的 ...

  5. AppScan学习笔记

    AppScan学习笔记 http://www.docin.com/p-777386896.html

  6. 使用ssh免密码登录其他机器

    本机 ssh-keygen -t rsa – cd ~/ssh – cp -p id_rsa.pub authorized_keys2 – chmod go-rwx authorized_keys2 ...

  7. Mac终端常用命令收集

    删除非空目录 rm -rf 目录名字 -r 就是向下递归,不管有多少级目录,一并删除-f 就是直接强行删除,不作任何提示的意思 终端修改hosts文件 sudo vi /etc/hosts 切换到su ...

  8. 关于IT概念的一些思考

    同事提及“软件工程.软件生命周期.项目管理.CMMI.IPD.RUP.UML及UML建模.面向对象分析与设计.需求分析.系统分析与设计……等等,它们到底是什么?它们之间有什么关系?”   下面是个人见 ...

  9. Xamarin.Forms中的ListView的ItemTrapped事件与ItemSelected事件的区别

    今天对Xamarin.Forms中的ListView的两个事件(ItemTrapped和ItemSelected)做了小小的研究,发现有以下几点区别: 1.ItemTrapped事件会优先被触发. 2 ...

  10. WCF中因序列化问题引起的异常和错误。

    尝试对参数 http://tempuri.org/ 进行序列化时出错: parameters.InnerException 消息是“不应为数据协定名称为“DBNull:http://schemas.d ...