结合存储过程自定义Datagrid分页功能

java自定义分页标签实现带条件的分页查询 jsp 自定义分页查询 可以带查询条件 因为网上很多 都不能带查询条件 所以本人做了修改 可以实现自定义 带条件的查询 立即下载

Web应用程序是显示数据库中数据的一个非常好的方法,通过它,你可以把业务复杂,并有访问和安全规则的数据库数据以一种简单、直观的方式向用户提供查询和更新的功能。用户判断数据库应用程序一个很常用的标准就是处理数据的快慢。许多Web页面都向用户提供了多种可搜索的列表显示来有效地定位记录的位置,一个比较简单而且常用的例子就是在线图书查询系统,它允许用户可以按作者,按书名或者按主题来检索图书信息。

ASP.NET提供了一个DataGrid控件可以比以前的ASP方便地创建创建数据列表,DataGrid控件除了内建的数据表现和方法之外,还允许用户自己定义表现形式。分页技术为用户可管理的数据查找提供方便。DataGrid内建的分页技术很容易实现,但数据量很大时,它的方便性是以牺牲性能为代价的。下面,我们就看看如何通过自定义的分页方法来实现快速处理大量数据的结果集的办法。我们这里讨论的方法比DataGrid的默认分页方法是快速和更加有效的,这是因为每次请求不需要把全部的数据结果发送到Web服务器。相反,它只需要发送每个页面需要的那些数据集。例如:如果一个用户只要求100个页面中每页显示25条记录的第4页的结果集,服务器只需要发送第75-100行的数据即可,而不是1-1000行的完全数据。默认的传送方式如图1所示:

从图中可以看出,DataGrid的内建分页方法是效率不高的,每次请求都必须把整个查询结果发送给Web服务器,Web服务器再把数据分成相应的页面。利用DataGrid的内建的分页方法尽管是很简单的,但是,由于Web应用的无序性特征,一个用户每次从一个页面转向另外一个页面时,DataGrid对象都被销毁并重新创建,这就意味着数据库服务器每次都必须发送全部的结果集。

自定义的分页方法只返回所要检索的那些结果集,如下图2所示:

从上面的图中可以看到,数据库每次只需要返回所要显示的数据记录。首先,我们在数据库中建立一个存储过程,并有两个输入参数,分别是要返回数据的第一条记录数和最后一条记录数,在SQL Server7.0以上的版本中,都有一个top关键字限制返回到结果集中的前多少条记录数,然而不幸的是,没有一个方法可以返回中间一部分的数据,例如第75条记录到100条记录的数据。Oracle中有一个rownum()的扩展函数可以返回中间的记录,比如:"select * form Authors where Author_Last_Name = 'Anderson' and rownum() >=75 and rownum() <= 100"。然而,由于Oracle是在排序之前指定rownum的值,因此,这样的查询"select * from Authors where rownum <= 25 order by Author_Last_Name"将得不到我们期望的结果。我们下面所讲的方法是针对SQL Server的,但这里的概念对适合Oracle开发人员也是适用的。

要创建一个返回指定条记录结果的存储过程,首先必须指定返回结果集的条记录数,可以用临时表,也可以用table变量(SQL Server 2000),两个在性能上没有太大的差别,但是,table变量是存储在内存中的,如果你的服务器内存不多的话,可以考虑用临时表,临时表使用硬盘存储结果,临时表需要手工释放对象,而table变量在存储过程结束后自动释放。下面就是我们要创建的存储过程:

create proc GetAuthors

@Author_Last_Name as varchar(100) = null,

@StartRow as int = null,

@StopRow as int = null

AS

 

---- 建立有标识符列的table变量

declare @t_table table

(

[rownum] [int] IDENTITY (1, 1) Primary key NOT NULL ,

[Author_Last_Name] [varchar] (40) ,

[Author_First_Name] [varchar] (20) ,

[phone] [char] (12) ,

[address] [varchar] (40) ,

[city] [varchar] (20) ,

[state] [char] (2) ,

[zip] [char] (5)

)

 

---- 在返回指定的@StopRow行数之后停止处理查询

Set RowCount @StopRow

 

---- 插入到table变量中

insert @t_table

(

[Author_Last_Name],[Author_First_Name],[phone],[address],[city],[state],[zip]

)

SELECT [Author_Last_Name],[Author_First_Name],[phone],[address],[city],[state],[zip]

 

FROM authors

WHERE Author_Last_Name like '%' + @Author_Last_Name + '%'

ORDER BY Author_Last_Name

 

---- 返回到正确的结果

SELECT * FROM @t_table WHERE rownum >= @StartRow

ORDER BY rownum

 

GO

 

参数@StartRow和@StopRow接收整数值,代表要返回的开始记录和结束记录,如果要在一个25条记录的页面中返回第4页,我们就可以设置@StartRow为76,@StopRow为100。我们在table变量@t_table中定义了一个叫rownum的整数类型的列,并指定为标识符列,这个列在我们这里介绍的分页技术中是很重要的,当我们插入数据时,这个列自动增加,它将在插入数据时起排序作用。SET ROWCOUNT语句对优化性能很关键,它告诉SQL Server进行限制要插入的数据,如果我们要76-100条记录之间的数据,那么就可以不必插入大于100条记录的数据。最后的SQL语句从@t_table的table变量选择rownum大于或者等于@StartRow的那些数据集,然后把它们返回到Web服务器,由Web服务器绑定到DataGrid对象。值得注意的是:如果要得到76到100条记录的数据,我们必须往table变量中插入100条记录的数据,这意味着:如果浏览者请求的页数越来越大,页面性能也会有所下降的。例如:要显示第100页的数据(从第2451条记录到第2500条记录),我们必须先向table变量或者临时表填充2500条记录,因此,性能依赖于你计算机的硬件和你要返回的记录数,有测试表明,在SQL Server 2000中使用这样的存储过程平均在200-250毫秒内返回第100页,而返回第一页只需要4毫秒。即使返回第500页的数据(从第12451到12500条记录)也可以在650到750毫秒内完成。应该说这种情况是很少见到的。 但为了减轻数据库和网络传输的压力,设计合理的查询结果页数是很见效的。

现在,我们写好了一个存储过程来做分页的工作,而不是用Web服务器来做这个事情,我们接下来要做的就是为DataGrid对象编写代码来使用我们的分页技巧。DataGrid的AllowPaging、AllowCustomPaging、PageStyle属性有助于避免我们编写自己的代码来跟踪记录浏览者目前在哪一个页面访问和都请求过哪些页面。我们应当设定AllowCustomPaging为True,否则,在你使用DataReader或者SQLDataReader绑定到DataGrid对象会遇到麻烦。在任何可能的情况下,应当尽量使用SQLDataReader而不要使用DataSet来装载DataGrid对象。据性能测试表明:在构建列表显示数据时,使用SQLDataReader比使用DataSet要快两倍以上。不要设定AllowPaging和PageStyle的值,这是因为,如果使用这两个属性,你必须在viewstate中维护DataGrid,但为了追求性能最佳化,我们必须设定DataGrid的EnableViewState属性为false,尽管这样我们自己必须编写一点代码来实现我们的分页,但是性能会有所提高的,因为在每次与Web服务器打交道时不必再在viewstate中存储内容了。

一旦我们关闭了DataGrid自己在viewstate中保存的能力,我们就必须自己编写代码来实现用户从一页导航到另一页。DataGrid如果自己不在viewstate中进行保存,那么它也不再跟踪记录“前一页”和“下一页”是哪些页面了。我们自己添加导航按钮来帮助浏览者进行导航。最简单的办法是在页面上增加两个按钮:“上一个”和“下一页”。要进入到下一页,我们在“下一页”按钮上增加click事件,通过我们的自定义分页存储过程请求相应的记录。例如:如果第一页由第1条到第25条记录组成,那么要导航到第二页,我们就向存储过程的@StartRow传递参数26,向@StopRow传递参数50即可,要返回到第一页,@StartRow和@StopRow分别为1和25。

下面是使用VB.NET编写的“下一页”事件的例子:

 

Private Sub ButtonNext_Click (ByVal sender As Object, _

ByVal e As System.EventArgs) Handles ButtonNext.Click

 

viewstate("StartRow") = viewstate("StartRow") + dgrid.PageSize

viewstate("StopRow") = viewstate("StartRow") + dgrid.PageSize

 

'运行存储过程,返回SQLDataReader

dgrid.DataSource = RunSprocReturnDR (textAu_lname.Text, _

textAu_fname.Text, viewstate("StartRow"),viewstate("StopRow"))

dgrid.DataBind()

 

End Sub

 

从上面的例子可以看出,我们在viewstate中保存的只是@StartRow和@StopRow的信息,这比在viewstate中保存整个DataGrid对象高效的多。“下一页”和“上一页”按钮提供的只是简单的导航,要实现更详细的导航信息,比如:共多少页、自定义页面记录数等,也是可以的,但要记住不要使用DataGrid内建的PagingStyle属性。根据测试表明,不保存DataGrid会提高性能到54%。

列表显示信息的性能对浏览者的访问是很重要的,设计不好的列表显示会大大降低应用程序的性能,不管它的后端数据库是多么快速。使用自定义分页技术,我们可以避免DataGrid默认分页机制带来的缺陷.

.net50个常用方法简单华丽的分页控件功能大的分页控件 50个实用方法 再次声明 千万不要把XiaoQi.dll 跟 XiaoQi.XML 给分开 2013年3月8号 修复了很多bug 调整了源代码 添加的时候 一定要引用 不要直接复制DLL 不然没有方法注释 最强大分分页控件 华丽的分页控件 实用的分页控件 有最新最实用的方法 联系小柒 下面是 AspNetHelp 类 方法概述 ///Show()弹出对话框 ///重载Show()弹出对话框 并且跳转界面 ///ShowJavascript()执行javascript脚本 ///FileDelete()给出文件虚拟路径删除文件 ///FileSize()获取上传文件大小 ///FileUpload()文件上传 路径upload/ 自动重命名 ///FileDownload()文件下载 调用方法如 FileDownload(Response,Server,文件虚拟路径) ///FileTxtWrite()写入TXT文本 给出要创建Txt 文本的地址 ///FileTxtReader()读取TXT文本 Txt 文本的地址 返回一个数组 每一行为数组里的一个元素 ///StringEncrypt() DES字符串加密中文不可以加密 ///StringDecrypt()DES解密字符串 ///StringMD5Encrypt()MD5加密 ///StringPYChar()单个汉字返回该汉字首字母 ///StringRandom()生成指定位数的随机数 ///StringEdit()给出指定字符串长度多少位后用点显示... ///StringReplaceSpace()替换文本中的空格和换行 ///StringColor()改变字的颜色 ///StringNull()当对象是空的时候 转为空字符串 ///StringConvert()汉字转拼音 ///StringNumber()数字转换中文 ///StringRep()url参数为中文时候转换加密 ///StringRes()url参数为中文时候转换解密 ///ShowWindowForm()弹出新窗口页面 ///ShowFormModalDialog()弹出模式窗口页面 ///SqlGetMaxID()给出表名列名 int类型 查询出最大列值+1 适用于主键 ///SqlGetSingle()执行一条计算查询结果语句,返回查询结果(object)。 ///SqlExecute()执行SQL语句,返回影响的记录数 ///SqlRunStr()执行SQL语句,不返回影响的记录数 ///SqlRunReturn()执行SQL语句,并返回第一行第一列结果 ///SqlGetReader()获得SqlDataReader对象 使用完须关闭DataReader,关闭数据库连接 ///SqlGetTable()执行查询语句,返回DataTable ///SqlDataSet()执行查询语句,返回DataSet ///SqlIsCunZai()执行Sql 语句查询是否有数据 如果没有返回假 ///SqlRunProc()执行存储过程 ///DataBindDropDownListDefault()DropDownList控件绑定 带默认选择项 如"请选择" ///DataBindDropDownList()DropDownList控件绑定 不带默认选择项 ///DataBindRadioButtonList()RadioButtonList控件绑定 默认第一个选中 ///DataBindCheckBoxList()CheckBoxList控件绑定 ///ElseIpAddr()调用此方法 返回当前登录的省市IP地址 ///ElseDataTimeIng()返回本地电脑的当前日期的年月日时分秒 动态的显示 JS实现 ///ElsePageLoad()页面加载数据加载完成呈现页面 ///ElseCkeck()返回页面验证码图片 使用方法:单独创建一个页面 在首次加载事件里写 AspNetHelp.ElseCkeck(Page); 在使用验证码的页面直接写 img src="这个页面的路径" 注意验证码保存在 Session["CheckCode"]中 这里是区分大小写的 ///ElseColorRGB()由于QQ截图的取色会出现RGB的颜色 这里能转换成16进制 分页控件详情请看内置文档 立即下载

相关推荐

SmartTable:一个定制表,用于按页面显示数据

智能表 一个定制表,用于按页面显示数据 这是用于按页面显示数据的自定义表格。 单元格按文本长度扩展。 所有列都可以通过水平滑动来显示。 对于更改页面,可以设置表的页面索引。 一个自定义表格,分页展示,可以按照文本长度扩展,左右滑动显示全部列,通过更改页码支持上下翻页。 支持的api: // set text color public void setTextColor( int textColor); // set table head color public void setTitleColor( int titleColor); // set cell width limit public void setMaxCellWidth( int width); // set copy cell background public void setCopyColor( int colo

文本到有声视频生成:模态条件控制与交互优化实战指南

多模态人工智能技术通过融合文本、图像、音频和视频等多种信息模态,实现了从概念描述到视听内容的智能生成。其核心原理基于深度学习模型对跨模态语义对齐和时序同步的处理,能够有效解决传统视频制作中声画不匹配的技术难题。在工程实践中,模态条件控制技术允许开发者对生成过程进行细粒度调控,而Cross-Referential Rewriter(CRR)技术则通过交叉参考机制确保多模态信息的一致性。这些技术为数字内容创作提供了强大的自动化工具,特别适用于数字人播报、电商视频生成等场景。本文聚焦文本到有声视频生成这一具体应用

weixin_30598225的博客 399

简单易用的自定义标签分页显示

简单,简易使用 package auvtech; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; public class PageTag extends TagSupport { private String name="page"; private String action; private int measurement; public void setName(String name) { this.name = name; } public void setAction(String action) { this.action = action; } public void setMeasurement(int measurement) { this.measurement = measurement; } @Override public int doStartTag() throws JspException { try{ JspWriter out = pageContext.getOut(); Pageination page=(Pageination)pageContext.getSession().getAttribute(name); //在page中只有3个属性是已知的,1,一共多少记录,2,一页显示多少记录,3,以及返回的结果集 //1.重新给page分布内容 setPage(page); //2.输出html out.print(getHtml(page)); //3.输出js out.print(getJs(page)); }catch(IOException ioException){ throw new JspException(ioException.getMessage() ); } return(SKIP_BODY); } private void setPage(Pageination page){ if (page.getMaxNoteNum() != 0) { // 一共多少页 if (page.getOnePageMaxNum() != 0&&page.getMaxNoteNum() % page.getOnePageMaxNum() == 0) { page.setMaxPageNum(page.getMaxNoteNum() / page.getOnePageMaxNum()); } else if(page.getOnePageMaxNum()!= 0){ page.setMaxPageNum(page.getMaxNoteNum() / page.getOnePageMaxNum() + 1); } }else { page.setMaxPageNum(0); } //设置当前页记录数目 if(page.getResultList()!= null) page.setCurrentPageNoteNum(page.resultList.size()); else page.setCurrentPageNoteNum(0); } //生成html代码 private String getHtml(Pageination page){ StringBuffer sb = new StringBuffer(); //添加一个尺寸框 sb.append("量度米尺:"); sb.append("<input text='text' id='onePageMaxNum' name='onePageMaxNum' size='2' value='"+page.getOnePageMaxNum()+"'/>"); sb.append("[ 总发信息 ]: " + page.getMaxNoteNum() + "条 ,当前是:第" + page.getCurrentPage() + " 页 / 共 " + page.getMaxPageNum() + "页 本页 " + page.getCurrentPageNoteNum() + " 条"); //首页,上一页,下一页,尾页 if(page.getCurrentPage()>1) sb.append(" <a onclick='firstPage();' style='cursor:pointer'>首页</a>"); else sb.append("首页"); if(page.getCurrentPage()>1) sb.append(" <a onclick='previousPage();' style='cursor:pointer'>上一页</a>"); else sb.append("上一页"); if(page.getCurrentPage()<page.getMaxPageNum()) sb.append(" <a onclick='nextPage();' style='cursor:pointer'>下一页</a>"); else sb.append("下一页"); if(page.getCurrentPage()<page.getMaxPageNum()) sb.append(" <a onclick='lastPage();' style='cursor:pointer'>尾页</a>"); else sb.append("尾页"); //跳转 sb.append(" 跳转到:<select name='goToPage' onchange='javascript:goPage(this.value)'>"); for (int i = 1; i <= page.getMaxPageNum(); i++) { sb.append("<option value=").append(i); if ( i == page.getCurrentPage()){ sb.append(" selected"); } sb.append(">第").append(i).append("页</option>"); } sb.append("</select>"); return sb.toString(); } //生成js代码 private String getJs(Pageination page){ StringBuffer sb=new StringBuffer(); sb.append("<script language=javascript>"); //跳转事件 sb.append("function goPage(cpage){").append("window.location='").append(action); sb.append("?currentPageNum='+").append("cpage"); sb.append("+'&onePageMaxNum='+").append("getMaxNum()"); sb.append(";}"); //得到分页米尺数值 sb.append("function getMaxNum(){"); sb.append("var val=document.getElementById('onePageMaxNum').value;"); sb.append("if(val=='') return "+measurement+";"); sb.append(" return document.getElementById('onePageMaxNum').value"); sb.append(";}\n"); //首页 sb.append("function firstPage(){"); sb.append("var loca='"+action+"?currentPageNum="+1+"&onePageMaxNum='+getMaxNum();"); sb.append("window.location.href=loca;"); sb.append("}\n"); //上一页 sb.append("function previousPage(){"); sb.append("var loca='"+action+"?currentPageNum="+(page.getCurrentPage()-1)+"&onePageMaxNum='+getMaxNum();"); sb.append("window.location.href=loca;"); sb.append("}"); //下一页 sb.append("function nextPage(){"); sb.append("var loca='"+action+"?currentPageNum="+(page.getCurrentPage()+1)+"&onePageMaxNum='+getMaxNum();"); sb.append("window.location.href=loca;"); sb.append("}\n"); //尾页 sb.append("function lastPage(){"); sb.append("var loca='"+action+"?currentPageNum="+page.getMaxPageNum()+"&onePageMaxNum='+getMaxNum();"); sb.append("window.location.href=loca;"); sb.append("}\n"); sb.append("</script>"); return sb.toString(); } }

cirroData | 行云数据库初次使用

cirroData | 行云数据库初次使用

画个圆圆的地球 5627

深入mysql创建自定义函数与存储过程的详解

本篇文章是对mysql创建自定义函数与存储过程进行了详细的分析介绍,需要的朋友参考下

ExoPlayer硬解码实战:如何绕过系统默认软解码提升播放性能(附完整代码)

本文深入剖析了ExoPlayer默认解码器选择机制的不确定性,并提供了通过自定义MediaCodecSelector强制启用硬解码的完整实战方案。该方案能有效解决因软解码导致的播放卡顿、黑屏花屏及高功耗问题,显著提升Android应用在各种设备上的视频播放性能与稳定性。

weixin_29295541的博客 456

关于datagrid的使用以及动态修改,以及使用存储过程的介绍

1.关于Datagrid,Datalist等数据绑定控件由于vs.net是Codebehind的, 而quickstart 上的例子是代码与页面混合的,所以许多朋友有些疑惑。特别是有关template中如何触发事件的问题。是这样,许多server control都有一个commandname属性就是在.aspx中设置你那个edit的commandname,在.cs中用e.CommandName 得

萝卜青菜 2242

WPF窗口定位技巧:从基础到高级的三种实现方法

本文详细解析WPF窗口定位的三种核心方法:屏幕居中(CenterScreen)、父窗口居中(CenterOwner)和手动定位(Manual)。通过对比其适用场景、实现代码与注意事项,帮助开发者根据实际需求选择最佳方案,从而提升WPF应用程序的用户体验与专业度。

weixin_29224309的博客 272

WPF数据库存储过程与DataGrid

1.功能需求和效果截图 功能需求:两个DataGrid。第一个DataGrid载入员工信息表的数据,第二个DataGrid由combobox选择岗位信息表不同的值(显示值是岗位名称,选择值是岗位ID)显示员工信息表不同的数据。(员工信息表,岗位信息表由员工岗位信息表连接起来,所以第二个DataGrid是要实现多表维护,高级复杂多表查询的功能) 两个按钮...

dmfs83342的博客 359

从零开始搭建企业级安全扫描平台:基于Docker的Greenbone和ClamAV部署指南

本文提供了一份基于Docker容器技术,从零开始搭建企业级安全扫描平台的实战指南。详细介绍了如何部署和集成漏洞扫描工具Greenbone与病毒扫描工具ClamAV,涵盖架构设计、Docker环境优化、容器化部署步骤以及平台集成与监控方案,帮助企业构建自动化、可扩展的安全防御核心组件。

delta的博客 756

Transformer——从原理、模型架构到内部细节介绍

Transformer模型是一种基于注意力机制的深度学习模型,最早由Google在2017年的论文《AttentionIsAllYouNeed》中提出。自其问世以来就迅速席卷了自然语言处理他(NLP)领域,并在各类主流任务上取得了新的突破,包括机器翻译、语言建模、序列标注和文本分类等。在NLP领域取得巨大成功后,迅速扩展到了计算机视觉(CV)领域,并带来了革命性的变化。这种基于自注意力机制的深度学习模型,不仅在NLP任务中力压群雄,也成为CV领域的新宠。

小拉拉的博客 1万+

三种分页方式

本文采用三种分页办法,最后对三种分页办法分析了其优缺点。 建立表: CREATE TABLE [TestTable] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL , [LastName] [nvarchar] (100) COLL

elvis 980

GPU计算板卡设计原理图:735-基于3U VPX的AGX Xavier GPU计算主板

基于3U VPX的 Jetson AGX Xavier GPU计算主板是LINUX环境下软件开发等理想工具。是用于视频处理,相机信号,支持PCIE、USB、RS422、RS232、网口、SPI、I2C等综合性的信号计算主板。3. 支持外接HDMI连接显示器,并支持键盘,鼠标等外接设备进行调试。8 核 ARM v8.2 64 位 CPU、8 MB L2 + 4 MB L3。4路Gigabit Ethernet (10/100/100)link。1路RS232,1路RS485。1路 NVMe PCIeX4。

980

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

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

yzx110的专栏 1万+

SAP物料主数据表结构全解析:ABAP开发与MM模块必知必会

本文深入解析SAP物料主数据的核心表结构,涵盖MARA、MAKT、MARC、MARD及MVKE等关键表。详细阐述了物料主数据在ABAP开发和MM模块中的存储逻辑与关联关系,帮助开发者和顾问高效处理数据查询、增强功能及业务故障排查,是掌握SAP物料管理基础的必读指南。

weixin_29216957的博客 379

Yolov8-pose关键点检测:通用倒瓶颈(UIB)搜索块结合C2f二次创新 | 轻量化之王MobileNetV4

通用倒瓶颈(UIB)搜索块结合C2f二次创新

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 613

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

              ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页 create procedure ListProduct(       @PageIndex int, -- 分页后需要页的序号       @PageSize int, -- 一页的大小       @ConditionSQL – 查询条件的SQL语句) AS

狂风专栏 1724

GPU服务器维修全流程:从检测到解锁

《GPU服务器维修维保全流程指南》摘要:本文系统介绍GPU服务器从检测到解锁的完整维修流程。检测环节包含物理检查(氧化层、散热、PCB板)和电子诊断(ECC报错率、电源波动等);核心维修技术涵盖PCB板修复(微孔镀铜、BGA返修)和芯片级维修(成功率78-92%);解锁验证阶段包括性能解锁(VBIOS重写)和72小时稳定性测试。文末提供故障速查表及维保建议,强调定期除尘可降低38%故障率,推荐环境粉尘浓度控制在≤0.3mg/m³。

2401_89353317的博客 890

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

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

Forekaztor's Folder 1616

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: 工业计算机在网络安全上的应用
下一篇: 说得好啊!!
eigo
博客等级 码龄22年 17粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值