asp.net 中DataGrid自定义分页(简单,实用,易懂)

ASP.NET中DataGrid控件的使用 在学习ASP.NET的过程中很长一段时间对DataGrid控件的使用不甚了解,在晚上找到的一些essay也并不系统,这篇文章总结了我对DataGrid基本使用的一些理解,希望能对刚接触asp.net的朋友有一些帮助。 这篇文章主要包括三个主要内容:1,  DataGrid绑定数据的实现2,  DataGrid实现分页功能3,  DataGrid实现数据编辑功能文章中的示例在Visual Studi 阅读详情
    using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Configuration;
namespace WS.Webs
{
    
/// <summary>
    
/// WebForm1 的摘要说明。
    
/// </summary>

    public class WebForm1 : System.Web.UI.Page
    
{
        
protected System.Web.UI.WebControls.DataList datalist1;
        
protected System.Web.UI.WebControls.Label LPageCount;
        
protected System.Web.UI.WebControls.Label LRecordCount;
        
protected System.Web.UI.WebControls.LinkButton Fistpage;
        
protected System.Web.UI.WebControls.LinkButton Prevpage;
        
protected System.Web.UI.WebControls.LinkButton Nextpage;
        
protected System.Web.UI.WebControls.LinkButton Lastpage;
        
protected System.Web.UI.WebControls.Label LCurrentPage;
        
protected System.Web.UI.WebControls.TextBox gotoPage;
        
//自定义分页码记录
        const int PageSize=20;
        
int PageCount,RecCount,CurrentPage,Pages,JumpPage;//定义几个保存分页参数变量

    
        
private void Page_Load(object sender, System.EventArgs e)
        
{
            
if(!Page.IsPostBack)
            
{
                RecCount 
= Calc();//通过Calc()函数获取总记录数
                PageCount = RecCount/PageSize + OverPage();//计算总页数(加上OverPage()函数防止有余数造成显示数据不完整)
                ViewState["PageCounts"] = RecCount/PageSize - ModPage();//保存总页参数到ViewState(减去ModPage()函数防止SQL语句执行时溢出查询范围,可以用存储过程分页算法来理解这句)
                ViewState["PageIndex"] = 0;//保存一个为0的页面索引值到ViewState
                ViewState["JumpPages"] = PageCount;//保存PageCount到ViewState,跳页时判断用户输入数是否超出页码范围
                
//显示LPageCount、LRecordCount的状态
                LPageCount.Text = PageCount.ToString();
                LRecordCount.Text 
= RecCount.ToString();
                
//判断跳页文本框失效
                if(RecCount <= 20)
                    gotoPage.Enabled 
= false;
                TDataBind();
//调用数据绑定函数TDataBind()进行数据绑定运算

            }

        }


        
//计算余页
        public int OverPage()
        
{
            
int pages = 0;
            
if(RecCount%PageSize != 0)
                pages 
= 1;
            
else
                pages 
= 0;
            
return pages;
        }


        
//计算余页,防止SQL语句执行时溢出查询范围
        public int ModPage()
        
{
            
int pages = 0;
            
if(RecCount%PageSize == 0 && RecCount != 0)
                pages 
= 1;
            
else
                pages 
= 0;
            
return pages;
        }


        
/*
   *计算总记录的静态函数
   *本人在这里使用静态函数的理由是:如果引用的是静态数据或静态函数,连接器会优化生成代码,去掉动态重定位项(对

海量数据表分页效果更明显)。
   *希望大家给予意见、如有不正确的地方望指正。
  
*/

        
public static int Calc()
        
{
            
int RecordCount = 0;
            SqlCommand MyCmd 
= new SqlCommand("select count(*) as co from fdcproject",MyCon());
            SqlDataReader dr 
= MyCmd.ExecuteReader();
            
if(dr.Read())
                RecordCount 
= Int32.Parse(dr["co"].ToString());
            MyCmd.Connection.Close();
            
return RecordCount;
        }


        
//数据库连接语句(从Web.Config中获取)
        public static SqlConnection MyCon()
        
{
            SqlConnection MyConnection 
= new SqlConnection(ConfigurationSettings.AppSettings["DSN2"]);
            MyConnection.Open();
            
return MyConnection;
        }


        
private void TDataBind()
        
{
            CurrentPage 
= (int)ViewState["PageIndex"];//从ViewState中读取页码值保存到CurrentPage变量中进行按钮失效运算
                Pages = (int)ViewState["PageCounts"];//从ViewState中读取总页参数进行按钮失效运算
            
//判断四个按钮(首页、上一页、下一页、尾页)状态
            if (CurrentPage + 1 > 1)
            
{
                Fistpage.Enabled 
= true;
                Prevpage.Enabled 
= true;
            }

            
else
            
{
                Fistpage.Enabled 
= false;
                Prevpage.Enabled 
= false;
            }

            
if (CurrentPage == Pages)
            
{
                Nextpage.Enabled 
= false;
                Lastpage.Enabled 
= false;
            }

            
else
            
{
                Nextpage.Enabled 
= true;
                Lastpage.Enabled 
= true;
            }

            
//数据绑定到DataList控件
            DataSet ds = new DataSet();
            
//核心SQL语句,进行查询运算(决定了分页的效率:))
            SqlDataAdapter MyAdapter = new SqlDataAdapter("Select Top "+PageSize+" * from fdcproject where projid not in(select top "+PageSize*CurrentPage+" projid from fdcproject order by projid asc) order by projid asc",MyCon());
             MyAdapter.Fill(ds,
"news");
            datalist1.DataSource 
= ds.Tables["news"].DefaultView;
            datalist1.DataBind();
            
//显示Label控件LCurrentPaget和文本框控件gotoPage状态
            LCurrentPage.Text = (CurrentPage+1).ToString();
            gotoPage.Text 
= (CurrentPage+1).ToString();
            
//释放SqlDataAdapter
            MyAdapter.Dispose();
        }












        
Web 窗体设计器生成的代码

        
private void gotoPage_TextChanged(object sender, System.EventArgs e)
        
{
            
try
          
{
           JumpPage 
= (int)ViewState["JumpPages"];//从ViewState中读取可用页数值保存到JumpPage变量中
           
//判断用户输入值是否超过可用页数范围值
           if(Int32.Parse(gotoPage.Text) > JumpPage || Int32.Parse(gotoPage.Text) <= 0)
            Response.Write(
"<script>alert('页码范围越界!');location.href='WebForm8.aspx'</script>");
           
else
            
{
                 
int InputPage = Int32.Parse(gotoPage.Text.ToString()) - 1;//转换用户输入值保存在int型InputPage变量中
                 ViewState["PageIndex"] = InputPage;//写入InputPage值到ViewState["PageIndex"]中
               TDataBind();//调用数据绑定函数TDataBind()再次进行数据绑定运算
            }

           }

             
//捕获由用户输入不正确数据类型时造成的异常
            catch(Exception exp)
            
{
                Response.Write(
"<script>alert('"+exp.Message+"');location.href='WebForm8.aspx'</script>");
            }




        
        }


        
private void Page_OnClick(object sender, System.EventArgs e)
        
{
            CurrentPage 
= (int)ViewState["PageIndex"];//从ViewState中读取页码值保存到CurrentPage变量中进行参数运算
            Pages = (int)ViewState["PageCounts"];//从ViewState中读取总页参数运算

            
string cmd = ((LinkButton)sender).CommandName;
            
switch(cmd)//筛选CommandName
            {
                
case "next":
                    CurrentPage
++;
                    
break;
                
case "prev":
                    CurrentPage
--;
                    
break;
                
case "last":
                    CurrentPage 
= Pages;
                    
break;
                
default:
                    CurrentPage 
= 0;
                    
break;
            }

            ViewState[
"PageIndex"] = CurrentPage;//将运算后的CurrentPage变量再次保存至ViewState
            TDataBind();//调用数据绑定函数TDataBind()
        }



    }

}

 
PyTorch复现PSMNet踩坑全记录:从环境配置到KITTI数据集训练 本文详细记录了使用PyTorch复现CVPR经典立体匹配模型PSMNet的全过程,从环境配置到KITTI数据集训练,特别针对2023年主流软硬件环境中的常见问题提供解决方案。文章重点介绍了PSMNet的金字塔池化模块和堆叠沙漏结构,帮助研究者和工程师快速实现工业级深度估计,节省大量试错时间。 阅读详情

相关推荐

基于 Datawhale 开源量化投资学习指南(10):基于 LightGBM 的量化选股

通过本篇文章,我们深入探索了如何运用 LightGBM 机器学习模型实现量化选股。首先,我们通过获取股票的历史数据,进行特征工程和标签制作,将选股问题转化为一个分类问题。接着,我们使用 LightGBM 训练模型,并在验证集和测试集中评估了模型的表现。该选股策略的核心在于结合机器学习算法,从历史数据中寻找能够捕捉股票短期涨跌的关键特征,从而为投资者提供辅助决策支持。虽然本文的模型取得了一定的效果,但这只是量化投资领域的一小部分。

不想宅的冷同学 1346

ASP.NET中利用DataGrid的自定义分页功能

ASP.NET中利用DataGrid的自定义分页功能 ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页 ASP.Net中的DataGrid有内置分页功能, 但是它的默认的分页方式效率是很低的,特别是在数据量很大的时候,用它内置的分页功能几乎是不可能的事,因为它会把所有的数据从数据库读出来再进行分页, 这种只选取了一小部分而丢掉大部分的方法是不可去取的. 在最

2148

实战指南:在UE5中高效集成Entt(ECS)框架

本文提供了一份在虚幻引擎5中高效集成Entt ECS框架的实战指南。针对UE5项目在处理大规模动态实体时的性能瓶颈,详细讲解了如何通过数据驱动的ECS架构进行优化。内容包括前期环境准备、核心构建步骤、创建首个ECS子系统以及与UE原生系统的数据同步技巧,旨在帮助开发者快速掌握集成方法,提升游戏逻辑的执行效率。

weixin_29002209的博客 158

从新手到专家:FANUC示教器核心按键功能全解析与实战应用

本文全面解析FANUC示教器核心按键功能,从安全按键到运动控制键组,详细介绍了发那科机器人操作的关键技巧。通过实战应用案例,帮助操作者快速掌握示教器的使用要领,提升机器人编程与操控效率,适用于工业自动化领域的工程师和技术人员。

weixin_30655569的博客 348

激光SLAM算法性能对比:在Ubuntu20.04上实测Point-LIO/FAST_LIO2/Faster-LIO的运行效果

本文在Ubuntu 20.04平台上对Point-LIO、FAST-LIO2和Faster-LIO三款激光SLAM算法进行了深度实测与性能对比。通过量化分析绝对轨迹误差、CPU/内存占用及单帧处理延迟等核心指标,结合室内外场景数据,为高精度测绘、服务机器人及自动驾驶等不同应用场景提供了清晰的选型指南和实战调优建议。

weixin_28335283的博客 368

Windows 11最新WDK安装避坑指南:从Visual Studio配置到KMDF驱动开发

本文提供了在Windows 11系统上进行KMDF驱动开发的完整环境搭建与实战指南。针对最新WDK与Visual Studio的配置变化,详细解析了从独立安装WDK/SDK、创建首个KMDF驱动项目,到编译排错、部署调试的全流程,帮助开发者高效避坑,顺利开启Windows内核开发。

weixin_29302047的博客 526

ASP.NET:DataGrid控件的分页功能

ASP.NET:DataGrid控件的分页功能

xuxiaoxia_88的专栏 983

VM下安装linux虚拟机(ubuntu)和Intel parallel XE 2013(ifort2013)

VM下安装ubuntu和ifort2013跑自己的模式 由于新冠疫情,本人只能在家工作,很多重要的文件和程序都留在了办公室的linux机器上,工作无法正常开展。本来准备去办公室把机器搬回家不曾想学校所有门禁都关闭,不许进入,何时解禁也没有明确日期。科研不能等人,没条件科研只能想办法创造条件了。 以前在自己的笔记本(windows)上装过一次VM和ifort但无奈程序不能正常跑,所以之前就放弃了。本...

pangdahai3366的博客 1497

Web Form中的Datagrid的自定义分页

ASP.NET带给我们很多惊喜,强大的Web Form控件自然是其中的重要部分。这其中,最受关注的当然是Datagrid。在ASP中用HTML标记语法来输出数据的方法在Datagrid数据绑定面前显得如此繁杂。但是只使用Datagrid自身的功能,还是达不到实际的工作要求。本文就是给大家演示如何提高我们的工作效率、降低服务器的负载压力。1. Datagrid的分页显示当查           ...

weixin_33898233的博客 227

硬件开发流程

研发流程在一个有一定规模的企业中起到了非常重要的作用,也是一个产品或者项目成功量产出货依赖的平台体系,作为工程师如果想要走的更远,就必须了解流程体系,了解如何对产品的开发质量进行更好的管控。...

weixin_44126796的博客 8374

机器学习预测土壤养分:从电导率、pH到随机森林与神经网络的农业实践

在智慧农业与精准农业领域,机器学习已成为处理复杂农业数据、挖掘潜在规律的关键技术。其核心原理在于通过算法从多维数据中自动学习特征与目标变量之间的映射关系,尤其擅长捕捉非线性关联。这项技术的核心价值在于能够将传统上依赖昂贵、耗时实验室分析的问题(如土壤养分检测),转化为基于易获取传感器数据(如电导率、pH值)的快速、低成本预测任务,为农业生产的实时决策与资源优化提供了全新可能。其典型应用场景包括作物生长监测、产量预测以及精准施肥管理等。本文聚焦于利用随机森林和神经网络等回归算法,构建通过土壤物理参数预测氮磷钾

weixin_33693070的博客 663

ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页

             ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页 ASP.Net中的DataGrid有内置分页功能, 但是它的默认的分页方式效率是很低的,特别是在数据量很大的时候,用它内置的分页功能几乎是不可能的事,因为它会把所有的数据从数据库读出来再进行分页, 这种只选取了一小部分而丢掉大部分的方法是不可去取的.在最进的一个项目中因为一个管理页

yzx110的专栏 1万+

✨在Windows11上安装虚拟机(VMware17.6.0)保姆级教程(附安装包)

VMware Workstation Pro 是一款功能强大的虚拟机软件,它允许你在单一的物理机上运行多个操作系统。性能卓越:VMware以其出色的性能和稳定性而闻名,适合运行资源密集型的虚拟机。用户友好:直观的用户界面使得即使是初学者也能快速上手。功能全面:支持多种操作系统,包括Windows、Linux、macOS等,满足不同用户的需求。企业级支持:VMware提供全面的技术支持,适合企业级用户。恭喜你成功安装了VMware Workstation Pro 17.6.0!

Python老吕的博客 1万+

基于ASP.NET的自定义分页显示

 摘要:本文针对WEB数据库记录的显示问题,用实例讨论了在ASP.NET框架下使用DataGrid控件对数据库记录的一种自定义分页显示。  关键词:WEB数据库;ASP.NET;DataGrid;分页  引言  在用户进行数据查询时通常有这样的情况,一个数据库查询将返回太多的行,一致不能在一页中显示。如果用户正在使用一个慢的链接,发送特别大的数据结果可能要花很长的时间。一旦获得了数据,用户可能发现

小人物的专栏 *^_^* 1326

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Asp.net中DataGrid控件的自定义分页

         使用DataGrid时自带的分页实现起来虽然比较方便,但是效率不高,每次都需要读取所有页(整个记录集),而加载的只是其中一页,造成了资源的浪费,记录多又会使效率变得很低。下面通过DataGrid的自定义分页功能来减少资源使用和提高效率。         实现的关键是设置AllowCustomPaging属性位True,并把VirtualItemCount属性设置位总的记录数,

gzzzz的专栏 1510

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ASP.NET中使用DataGrid显示数据

 版本:.NET Framework 1.1 DataGrid是ASP.NET中用于显示table类型数据的一个功能强大的控件,使用DataGrid控件可以轻松实现数据的分页显示及修改,并且拥有多种显示风格。本文主要简述DataGrid的使用方法,希望可以起到抛砖引玉的作用。 一常用属性   DataSource    使用 DataSource 属性指定要绑定到数据列

colin的专栏 5717

ASP.NET中利用DataGrid实现高效分页

ASP.Net中的DataGrid有内置分页功能, 但是它的默认的分页方式效率是很低的,特别是在数据量很大的时候,用它内置的分页功能几乎是不可能的事,因为它会把所有的数据从数据库读出来再进行分页, 这种只选取了一小部分而丢掉大部分的方法是不可去取的.    在最进的一个项目中因为一个管理页面要管理的数据量非常大,所以必须分页显示,并且不能用DataGrid的内置分页功能,于是自己实现分页. 下面介

半亩方塘 1004

Henry手记—Web Form中的Datagrid的自定义分页

         Henry手记—Web Form中的Datagrid的自定义分页                                  韩睿  ( 05/31/2003) ASP.NET带给我们很多惊喜,强大的Web Form控件自然是其中的重要部分。这其中,最受关注的当然是Datagrid。在ASP中用HTML标记语法来输出数据的方法在Datagrid数据绑定面前显得如

韩睿(Henry Han)的专栏 2348
上一篇: ASP.NET URL Rewrite. URL重写
下一篇: Visual Studio 2008各版本区别
hackhu
博客等级 码龄20年 17粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值