Eric的超高效数据分页(图示+代码) ^_^

2024-02-17 10:58

本文主要是介绍Eric的超高效数据分页(图示+代码) ^_^,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

运行截图:



数据表结构:
megaid int IDENTITY (1, 1) NOT NULL PRIMARY KEY  CLUSTERED
megaguid char (36) NOT NULL INDEX


数据生成脚本:
DECLARE  @i  int
SET  @i  =   1
WHILE  @i  <   1000001
    
BEGIN
        
INSERT   INTO  megatable (megaguid)  VALUES ( NEWID ())
        
SET  @i  =  @i  +   1
    
END
GO


C#代码:
        DateTime startTime;

        
void  Page_Init(Object sender, EventArgs e)
        
{
            startTime 
= DateTime.Now;
        }


        
protected   override   void  Render(HtmlTextWriter writer)  
        
{
            
base.Render(writer); 
            Response.Write(
"本页执行时间: "  +  (DateTime.Now - startTime));  
        }


        
int  records  =   10000 ;
        
int  pages  =   10 ;
        
int  pageSize  =   15 ;
        SqlConnection conn 
=   new  SqlConnection( " Server=(local);Database=megadata;User Id=sa;Password=xxx " );

        
void  Page_Load( object  sender, EventArgs e)
        
{
            
if (!IsPostBack)
            
{
                dgBind(getSqlString(
1));
            }


            
int firstPage = int.Parse(hidFirstPage.Value);
            pnlButtons.Controls.Add(getPager(firstPage));
            lblPrompt.Text 
= "数据提取范围: <B>SELECT TOP " + records.ToString() + " megaid FROM megatable ORDER BY megaguid</B>";
        }


        
string  getSqlString( int  selectedPage)
        
{
            
string[] idsStrArray;
            
string sqlStr;

            
if (Session["idStr"!= null)
            
{
                idsStrArray 
= Session["idStr"].ToString().Split('#');
            }

            
else
            
{
                sqlStr 
= "SELECT TOP " + records.ToString() + " megaid FROM megatable ORDER BY megaguid";
                SqlCommand cmd 
= new SqlCommand(sqlStr, conn);
                conn.Open();
                SqlDataReader dr 
= cmd.ExecuteReader();
                StringBuilder sb 
= new StringBuilder("");
                
int n = 1;

                
while (dr.Read())
                
{
                    
if (n % pageSize == 0)
                    
{
                        sb.Append(dr[
0].ToString() + "#");
                    }

                    
else
                    
{
                        sb.Append(dr[
0].ToString() + ",");
                    }

                    
                    n
++;
                }


                dr.Close();
                conn.Close();
                sb.Remove(sb.Length 
- 11);
                idsStrArray 
= sb.ToString().Split('#');
                Session[
"idStr"= sb.ToString();
            }


            hidPageCount.Value 
= idsStrArray.Length.ToString();
            sqlStr 
= "SELECT megaid, megaguid FROM megatable WHERE megaid IN (" + idsStrArray[selectedPage - 1+ "";
            sqlStr 
+= "ORDER BY megaguid";
            
return sqlStr;
        }

        
        Panel getPager(
int  firstPage)
        
{
            
int pageCount = int.Parse(hidPageCount.Value);
            Panel pnlPager 
= new Panel();
            pnlPager.Controls.Add(
new LiteralControl("<BR> 共" + pageCount.ToString() + "页 "));
            pnlPager.Controls.Add(getLinkButton(
"Fst""首页""pgBtn""1"));
            pnlPager.Controls.Add(
new LiteralControl(" "));

            
if (firstPage > 0)
            
{
                pnlPager.Controls.Add(getLinkButton(
"Pre""" + pages.ToString() + """pgBtn", (firstPage - pages + 1).ToString()));
                pnlPager.Controls.Add(
new LiteralControl(" "));
            }


            
for (int i = firstPage + 1; i < firstPage + pages + 1; i++)
            
{
                
if (i > pageCount)
                
{
                    
break;
                }

                
                pnlPager.Controls.Add(getLinkButton(i.ToString(), 
"[" + i.ToString() + "]""pgBtn", i.ToString()));
                pnlPager.Controls.Add(
new LiteralControl(" "));
            }


            
if (firstPage + pages < pageCount)
            
{
                pnlPager.Controls.Add(getLinkButton(
"Nxt""" + pages.ToString() + """pgBtn", (firstPage + pages + 1).ToString()));
                pnlPager.Controls.Add(
new LiteralControl(" "));
            }


            pnlPager.Controls.Add(getLinkButton(
"Lst""末页""pgBtn", pageCount.ToString()));
            
return pnlPager;
        }


        LinkButton getLinkButton(
string  lbId,  string  lbText,  string  lbCmdName,  string  lbCmdArg)
        
{
            LinkButton lb 
= new LinkButton();
            lb.ID 
= lbCmdName + lbId;
            lb.Text 
= lbText;
            lb.CommandName 
= lbCmdName;
            lb.CommandArgument 
= lbCmdArg;
            lb.Command 
+= new CommandEventHandler(pageTurn);
            
return lb;
        }

        
        
void  pageTurn( object  sender, CommandEventArgs e)
        
{
            LinkButton lb 
= (LinkButton)sender;
            
int selectedPage = int.Parse(lb.CommandArgument);
            
int firstPage = selectedPage / pages * pages;
            firstPage 
= (selectedPage % pages == 0? (firstPage - pages) : firstPage;
            hidFirstPage.Value 
= firstPage.ToString();
            dgBind(getSqlString(selectedPage));
            pnlButtons.Controls.RemoveAt(pnlButtons.Controls.Count 
- 1);
            pnlButtons.Controls.Add(getPager(firstPage));
            lb 
= (LinkButton)pnlButtons.Controls[pnlButtons.Controls.Count - 1].FindControl("pgBtn" + selectedPage.ToString());
            lb.Enabled 
= false;
        }

        
        
void  dgBind( string  sqlStr)
        
{
            SqlDataAdapter da 
= new SqlDataAdapter(sqlStr, conn);
            DataTable dt 
= new DataTable();
            conn.Open();
            da.Fill(dt);
            conn.Close();
            da.Dispose();
            dg.DataSource 
= dt;
            dg.DataBind();
        }


        
void  dg_ItemDataBound( object  sender, DataGridItemEventArgs e)
        
{
            dg.Controls[
0].EnableViewState = false;
        }

ASPX代码:
<% @ Import Namespace="System.Text"  %>
<% @ Import Namespace="System.Data.SqlClient"  %>
<% @ Import Namespace="System.Data"  %>
<% @ Page Language="C#"  %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" >
< HTML >
    
< HEAD >
        
< TITLE > Pager </ TITLE >
        
< SCRIPT  runat ="server" >
        
//插入上面的C#代码
        
</ SCRIPT >
        
< STYLE > BODY { FONT-SIZE: 9pt; FONT-FAMILY: Tahoma,宋体; TEXT-ALIGN: center }
    TD 
{ FONT-SIZE: 9pt; FONT-FAMILY: Tahoma,宋体; TEXT-ALIGN: center }
    
</ STYLE >
    
</ HEAD >
    
< BODY >
        
< FORM  id ="form1"  runat ="server" >
            
< DIV >
                
< ASP:LABEL  id ="lblPrompt"  runat ="server"  text ="?"  enableviewstate ="False"  enabletheming ="True" ></ ASP:LABEL >
                
< BR >
                
< ASP:PANEL  id ="pnlButtons"  runat ="server"  width ="560px" >
                    
< INPUT  id ="hidFirstPage"  type ="hidden"  value ="0"  runat ="server" >< INPUT  id ="hidPageCount"  type ="hidden"  runat ="server" >
                    
< ASP:DATAGRID  id ="dg"  runat ="server"  width ="100%"  onitemdatabound ="dg_ItemDataBound"  cellpadding ="4"
                        backcolor
="White"  borderwidth ="1px"  borderstyle ="None"  bordercolor ="#CC9966"  autogeneratecolumns ="False"
                        pagesize
="5" >
                        
< FOOTERSTYLE  forecolor ="#330099"  backcolor ="#FFFFCC" ></ FOOTERSTYLE >
                        
< HEADERSTYLE  font-bold ="True"  forecolor ="#FFFFCC"  backcolor ="#990000" ></ HEADERSTYLE >
                        
< PAGERSTYLE  horizontalalign ="Center"  forecolor ="#330099"  backcolor ="#FFFFCC" ></ PAGERSTYLE >
                        
< SELECTEDITEMSTYLE  font-bold ="True"  forecolor ="#663399"  backcolor ="#FFCC66" ></ SELECTEDITEMSTYLE >
                        
< ITEMSTYLE  forecolor ="#330099"  backcolor ="White" ></ ITEMSTYLE >
                        
< COLUMNS >
                            
< ASP:BOUNDCOLUMN  datafield ="megaid"  headertext ="MegaID" ></ ASP:BOUNDCOLUMN >
                            
< ASP:BOUNDCOLUMN  datafield ="megaguid"  headertext ="MegaGUID" ></ ASP:BOUNDCOLUMN >
                        
</ COLUMNS >
                    
</ ASP:DATAGRID >
                
</ ASP:PANEL ></ DIV >
            
< BR >
            
< ASP:HYPERLINK  id ="lnkReload"  runat ="server"  width ="80px"  navigateurl ="Pager.aspx"  enableviewstate ="False" > 重载 </ ASP:HYPERLINK >
        
</ FORM >
    
</ BODY >
</ HTML >

这篇关于Eric的超高效数据分页(图示+代码) ^_^的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/717564

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来