实现GridView翻页并且实现CheckBox选中功能的保持
在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">
>><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">
地址本名称:
</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">
备注:
</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">
选择联系人:
</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" />
第<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选中功能的保持的更多相关文章
- easyUI datagrid中checkbox选中事件以及行点击事件,翻页之后还可以选中
DataGrid其中与选择,勾选相关 DataGrid属性:singleSelect boolean 如果为true,则只允许选择一行. false ctrlSelect boolean 在启用多行选 ...
- GridView 翻页 索引超出范围
事件回顾 今天GridView翻页时,又遇到错误:索引超出范围.必须为非负值并小于集合大小. 这是当时的PageIndexChanging和RowCommand两个事件的后台代码 protected ...
- flex布局构建大屏框架并支持翻页动画、滚动表格功能
本文将利用flex属性构建大屏可视化界面.界面主要分标题栏.工具栏.数据可视化窗口.其中,翻页动画以及滚动表格功能分别分布在数据可视化界面两侧. 鼠标点击标题,可看到左侧窗口翻转动画: 整体布局效 ...
- bootstrap table 复选框选中后,翻页不影响已选中的复选框
使用的 jquery版本为 2.1.1 在项目中发现bootstrap table的复选框选中后,翻页操作会导致上一页选中的丢失,api中的 bootstrapTable('getSelections ...
- react 使用antd的在图片列表或表格中实现点击其他元素Checkbox选中功能
antd官网上的Checkbox功能只能单独使用,在表格中加入Checkbox也只能点击Checkbox按钮才能实现选中或取消功能 如果我们要实在表格行中点击或在图片列表中点击图片就能实现选中或取消, ...
- jQuery easyUI的datagrid,如何在翻页以后仍能记录被选中的行
1.先给出问题解决后的代码 <%@ page language="java" import="java.util.*" pageEncoding=&quo ...
- 移动端翻页插件dropload.js(支持Zepto和jQuery)
一. 声明 代码来源:github上的dropload项目. 二. 问题 dropload.js提供了最基本的上拉翻页,下拉刷新功能.对于由服务端一次返回所有数据的情况基本通用. 但是,需求往往不是服 ...
- 通过js实现整屏滑动+全屏翻页+动画展示+线性图
技术:html+css+jquery+jquery-ui.js+jquery.fullPage.js 概述 本demo主要通过html+css+js实现整屏滑动,全屏翻页并带动画的功能效果,借助于 ...
- jq:翻页时,保存上页多选框checkbox选中状态
这里主要讲一种:中间的 checkbox 是 通过Ajax调出的. 则翻页时,为了保存上页的选定状态,可在页面中定义一个变量,用来存储选中状态的值. <input class="cli ...
随机推荐
- dapper 操作类封装
using System; using System.Collections.Generic; using System.Data; using System.Data.SQLite; using S ...
- Unity3D常用代码总结
1 GUI汇总 function OnGUI() { GUI.Label(Rect(1,1,100,20),"I'm a Label"); //1 GUI.Box(Rect(1,2 ...
- nginx 相关问题
Nginx配置文件nginx.conf 参考:http://www.2cto.com/os/201212/176520.html Nginx自动切分日志: nignx没有自动分开文件存储日志的机制. ...
- java-cef系列视频第三集:添加flash支持
上一集我们介绍了如何搭建java-cef调试环境. 本视频介绍如何给java-cef客户端添加flashplayer支持 第四集视频我们将介绍java-cef中的自定义协议. 本作品采用知识共享署名- ...
- Mac OSX Versions输入username按1下都会出现2个字符,并且不能create,解决方法
我的系统,安装的versions1.3.2,下载地址:http://www.jb51.net/softs/193467.html 安装好了以后Versions输入username按1下都会出现2个字符 ...
- eclipse 编译出错(java.io.ObjectInputStream)的解决办法
Multiple markers at this line - The type java.io.ObjectInputStream cannot be resolved. It is indirec ...
- POJ 1451 T9
T9 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3083 Accepted: 1101 Description Ba ...
- WCF之常见异常整理(不断更新中...)
系统Win7 IIS7.5 异常1.找不到具有绑定 NetTcpBinding 的终结点的与方案 net.tcp 匹配的基址.注册的基址方案是 [http]. 产生原因:网站没有配置net.tcp ...
- 【转载】 IE/Firefox每次刷新时自动检查网页更新,无需手动清空缓存的设置方法
[参考了别人的文章]我们做技术,经常在写页面的时候需要多次刷新测试,可是浏览器都有自己的 缓存机制,一般CSS和图片都会被缓存在本地,这样我们修改的CSS就看不到效果 了,每次都去清空缓存,再刷新看效 ...
- Sql触发器模板
触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程. 触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. SQL Server 2005中触发器可以分 ...