asp.net在页面上jsp页面循环输出数字据并分页

用户名: @
密&&码:&&&|
密&&码:&|
密&&码:&|
您的位置: &
ASP.net 2.0 自定义控件的开发之数据分页
作者:shadowsky&&
内容导航:
【IT168技术文档】本文将向大家介绍使用ASP.net 2.0 开发自定义的数据分页控件
数据分页的好处 1、减少网络流量 2、提高运行效率
在大数据量时,数据分页是一个必须面对的现实,没有哪个客户愿意花上几分钟或更多的时间来等待。数据分页也有多种方式比如内存分页 SQL Server 存储过程分页等,这里将向大家介绍的是 SQL Server 存储过程分页方式,并结合ASP.net 2.0 的来编写一个通用的数据分页控件。
本文使用的存储过程来自
在这里感谢作者,他为我们提供了多种存储过程分页方法的速度对比。
现在启动你的Visual Studio 2005 然后新建一个类库项目取名为SqlPaging 如下图
然后添加两个类文件取名为AssemblyInfo及SqlPaging如下图
然后打开本工程的属性对话框将程序集名称设置SqlPaging 将根命名空间设置为DRMSystem 将应用程序类型设置为 Web 控件库如下图
打开 AssemblyInfo类输入如下代码
Imports System
Imports System.Web.UI
&Assembly: TagPrefix("DRMSystem.DataLayer", "drmsp")&
'定义在网页中用于标识自定义控件的标记前缀。
打开 SqlPaging 类输入如下代码(导入程序所用到的命名空间。)
Imports System
Imports System.Collections.Generic
ponentModel
Imports System.Text
Imports System.Data.SqlClient
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Security.Permissions
'定义转到按钮的风格
Public Enum StyleGoTo
LinkButton = <span style="COLOR: #
ImageButton = <span style="COLOR: #
输入如下代码添加一个命名空间 DataLayer 在添加一个 名为 SqlPaging 的类。这里我们只讲解ToolboxData它表示当从 Microsoft Visual Studio 等工具中的工具箱拖动自定义控件时为它生成的默认标记。
Namespace DataLayer
&AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal), _
AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal), _
DefaultProperty("PageInfo"), _
ToolboxData("&{0}:SqlPaging runat=""server""& &/{0}:SqlPaging&")& _
Public Class SqlPaging
Inherits CompositeControl
End Namespace
【内容导航】
&版权所有。未经许可,不得转载。
[责任编辑:]
相关论坛贴
itpub.net All Right Reserved.&&&&E-mail:
北京皓辰广域网络信息技术有限公司.&版权所有&&&&&&&&&&ASP.net的ACCESS数据分页方案_.NET教程_编程技术
您的位置: &
& ASP.net的ACCESS数据分页方案
access|asp.net|分页|数据
中国IT动力,最新最全的IT技术教程最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 首 页&|&程序开发&|&操作系统&|&软件应用&|&图形图象&|&网络应用&|&精文荟萃&|&教育认证&|&未整理篇&|&技术讨论 ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql 服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证 &&当前位置: & 程序开发 & Web开发 & Asp & 综合文章ASP.net的ACCESS数据分页方案 作者:未知 时间: 12:12 出处:Blog 责编:chinaitpower &&&&&&&&&&&&&&摘要:暂无常用ASP.net分页为 DataGrid 控件 和 ADO分页本分页为缓存唯一标识字段 只选出分页后的记录对大量数据库分页提高了效率NetPage.vbImports System.WebImports System.DataImports System.Data.OleDbNamespace RyNetPage&&& Public Class NetPage&&&&&&& Inherits System.Web.UI.Page&&&&&&& Private Conn As OleDbConnection&&&&&&& Private DS As DataSet&&&&&&& Private DT As DataTable&&&&&&& Private SQLstr, ScriptName As String&&&&&&& Private GetPage, PageCount, ListCount As Integer&&&&&&& Private OrderStr, TableStr, IndexStr, ColumnStr, JscriptStr As String&&&&&&& Private PageSizeNum As Integer&&&&&&& Private PageIndex As String&&&&&&& Public Sub New()&&&&&&&&&&& ScriptName = "RyNetPage"&&&&&&&&&&& PageSizeNum = 10&&&&&&& End Sub&&&&&&& Public WriteOnly Property ConnStr()&&&&&&&&&&& Set(ByVal Value)&&&&&&&&&&&&&&& Try&&&&&&&&&&&&&&&&&&& Conn = New OleDbConnection(Value)&&&&&&&&&&&&&&&&&&& Conn.Open()&&&&&&&&&&&&&&& Catch ex As Exception&&&&&&&&&&&&&&&&&&& Echo(".New" & ex.Message.ToString)&&&&&&&&&&&&&&& End Try&&&&&&&&&&& End Set&&&&&&& End Property&&&&&&& Public WriteOnly Property Jscript() As String&&&&&&&&&&& Set(ByVal Value As String)&&&&&&&&&&&&&&& JscriptStr = Value&&&&&&&&&&& End Set&&&&&&& End Property&&&&&&& Public WriteOnly Property PageSize() As String&&&&&&&&&&& Set(ByVal Value As String)&&&&&&&&&&&&&&& PageSizeNum = Convert.ToInt32(Value)&&&&&&&&&&& End Set&&&&&&& End Property&&&&&&& Public WriteOnly Property Order() As String&&&&&&&&&&& Set(ByVal Value As String)&&&&&&&&&&&&&&& If AppCache("Order") && Value Then&&&&&&&&&&&&&&&&&&& OrderStr = "Order " & Value&&&&&&&&&&&&&&&&&&& AppCache("Order") = OrderStr&&&&&&&&&&&&&&&&&&& WriteIndex()&&&&&&&&&&&&&&& End If&&&&&&&&&&& End Set&&&&&&& End Property&&&&&&& Public WriteOnly Property Table() As String&&&&&&&&&&& Set(ByVal Value As String)&&&&&&&&&&&&&&& TableStr = "[" & Value & "]"&&&&&&&&&&& End Set&&&&&&& End Property&&&&&&& Public WriteOnly Property Index() As String&&&&&&&&&&& Set(ByVal Value As String)&&&&&&&&&&&&&&& IndexStr = Value&&&&&&&&&&& End Set&&&&&&& End Property&&&&&&& Public WriteOnly Property Column() As String&&&&&&&&&&& Set(ByVal Value As String)&&&&&&&&&&&&&&& ColumnStr = Value&&&&&&&&&&& End Set&&&&&&& End Property&&&&&&& Public ReadOnly Property RecordsCount() As Integer&&&&&&&&&&& Get&&&&&&&&&&&&&&& Try&&&&&&&&&&&&&&&&&&& WriteIndex()&&&&&&&&&&&&&&&&&&& DT = AppCache("Index")&&&&&&&&&&&&&&&&&&& Return DT.Rows.Count&&&&&&&&&&&&&&& Catch ex As Exception&&&&&&&&&&&&&&&&&&& Echo(".RecordsCount " & ex.Message.ToString)&&&&&&&&&&&&&&& End Try&&&&&&&&&&& End Get&&&&&&& End Property&&&&&&& Public Function ShowRecords() As DataTable&&&&&&&&&&& Try&&&&&&&&&&&&&&& SQLstr = "Select " & ColumnStr & " From " & TableStr & PageWhere()&&&&&&&&&&&&&&& WriteIndex()&&&&&&&&&&&&&&& Dim Adapt As OleDbDataAdapter&&&&&&&&&&&&&&& Adapt = New OleDbDataAdapter(SQLstr, Conn)&&&&&&&&&&&&&&& DS = New DataSet&&&&&&&&&&&&&&& DS.Clear()&&&&&&&&&&&&&&& Adapt.Fill(DS)&&&&&&&&&&&&&&& Return DS.Tables(0)&&&&&&&&&&& Catch ex As Exception&&&&&&&&&&&&&&& Echo(".ShowRecords " & ex.Message.ToString)&&&&&&&&&&& End Try&&&&&&& End Function&&&&&&& Public Function ShowPage(Optional ByVal GetStr As String = "") As String&&&&&&&&&&& Dim Temp As String&&&&&&&&&&& Temp = "&Script Language=""Jscript"" Src=""" & JscriptStr & """&&/Script&" & Chr(13)&&&&&&&&&&& Temp += "&Script Language=""Jscript""&Pages(" & GetPage + 1 & "," & PageCount & "," & ListCount & ",'" & GetStr & "Page')&/Script&"&&&&&&&&&&& Return Temp&&&&&&& End Function&&&&&&& Public Sub Clear()&&&&&&&&&&& AppCache("Index") = Nothing&&&&&&& End Sub&&&&&&& Private Function PageWhere() As String&&&&&&&&&&& Try&&&&&&&&&&&&&&& Dim EPage As Integer&&&&&&&&&&&&&&& Dim i As Integer&&&&&&&&&&&&&&& DT = AppCache("Index")&&&&&&&&&&&&&&& GetPage = Convert.ToInt32(HttpContext.Current.Request.QueryString("Page"))&&&&&&&&&&&&&&& ListCount = RecordsCount()&&&&&&&&&&&&&&& PageCount = CInt(Fix(ListCount / PageSizeNum) + 1)&&&&&&&&&&&&&&& If ListCount Mod PageSizeNum = 0 Then&&&&&&&&&&&&&&&&&&& PageCount = PageCount - 1&&&&&&&&&&&&&&& End If&&&&&&&&&&&&&&& If GetPage = 0 Or PageCount & GetPage Then&&&&&&&&&&&&&&&&&&& GetPage = 1&&&&&&&&&&&&&&& End If&&&&&&&&&&&&&&& GetPage = GetPage - 1&&&&&&&&&&&&&&& If ListCount & PageSizeNum Or GetPage = PageCount Then&&&&&&&&&&&&&&&&&&& EPage = ListCount - 1&&&&&&&&&&&&&&& Else&&&&&&&&&&&&&&&&&&& EPage = (GetPage * PageSizeNum + PageSizeNum) - 1&&&&&&&&&&&&&&& End If&&&&&&&&&&&&&&& For i = (GetPage * PageSizeNum) To EPage&&&&&&&&&&&&&&&&&&& PageIndex += DT.Rows(i)(0) & ","&&&&&&&&&&&&&&&&&&& If i = ListCount - 1 Then Exit For&&&&&&&&&&&&&&& Next&&&&&&&&&&&&&&& PageIndex = Left(PageIndex, Len(PageIndex) - 1)&&&&&&&&&&&&&&& Return " Where " & IndexStr & " In(" & PageIndex & ")"&&&&&&&&&&& Catch ex As Exception&&&&&&&&&&&&&&& Echo(".PageWhere " & ex.Message.ToString)&&&&&&&&&&& End Try&&&&&&& End Function&&&&&&& Private Sub WriteIndex()&&&&&&&&&&& Try&&&&&&&&&&&&&&& If (AppCache("Index") Is Nothing) Then&&&&&&&&&&&&&&&&&&& Dim Adapt As OleDbDataAdapter&&&&&&&&&&&&&&&&&&& Adapt = New OleDbDataAdapter("Select " & IndexStr & " From " & TableStr & OrderStr, Conn)&&&&&&&&&&&&&&&&&&& DS = New DataSet&&&&&&&&&&&&&&&&&&& DS.Clear()&&&&&&&&&&&&&&&&&&& Adapt.Fill(DS)&&&&&&&&&&&&&&&&&&& AppCache("Index") = DS.Tables(0)&&&&&&&&&&&&&&& End If&&&&&&&&&&& Catch ex As Exception&&&&&&&&&&&&&&& Echo(".WriteIndex " & ex.Message.ToString)&&&&&&&&&&& End Try&&&&&&& End Sub&&&&&&& Private Property AppCache(ByVal SetName As String)&&&&&&&&&&& Get&&&&&&&&&&&&&&& Return HttpContext.Current.Application.Get(ScriptName & "_" & TableStr & "_" & SetName)&&&&&&&&&&& End Get&&&&&&&&&&& Set(ByVal Value)&&&&&&&&&&&&&&& HttpContext.Current.Application.Lock()&&&&&&&&&&&&&&& HttpContext.Current.Application.Set(ScriptName & "_" & TableStr & "_" & SetName, Value)&&&&&&&&&&&&&&& HttpContext.Current.Application.UnLock()&&&&&&&&&&& End Set&&&&&&& End Property&&&&&&& Private Sub Echo(ByVal Value As String)&&&&&&&&&&& Dispose()&&&&&&&&&&& HttpContext.Current.Response.Write(Value)&&&&&&&&&&& HttpContext.Current.Response.End()&&&&&&& End Sub&&&&&&& Protected Overrides Sub Finalize()&&&&&&&&&&& MyBase.Finalize()&&&&&&&&&&& Dispose()&&&&&&& End Sub&&&&&&& Public Overrides Sub Dispose()&&&&&&&&&&& If Not (Conn Is Nothing) Then&&&&&&&&&&&&&&& Conn.Dispose()&&&&&&&&&&& End If&&&&&&& End Sub&&& End ClassEnd NamespacePages.jsfunction Pages(requestpage,MaxPage,RecordCount,PageName){var p,if((requestpage-1)%10==0) &p=(requestpage-1)/10;else&p=parseInt((requestpage-1)/10);&document.write('&font class="smalltxt"&');&document.write('&'+RecordCount+'&');&document.write('&'+requestpage+'/'+MaxPage+'&&Pages&');if(requestpage==1)&document.write('&');else&document.write('&a href=?'+PageName+'=1 title=首页&&&/a&');&if(p*10&0)&{&&document.write(' &a href=?'+PageName+'='+p*10+' title=上十页&..&/a&');&}&for(ii=p*10+1;ii&=p*10+10;ii++)&{&&if(ii==requestpage)&&{&&&document.write (' &u&&font color="#CC0033"&'+ii+'&/font&&/u& ');&&}&&else&&{&&&document.write (' &a href=?'+PageName+'='+ii+'&'+ii+'&/a& ');&&}&if(ii==MaxPage)&&&}if(ii&MaxPage){&document.write('&a href=?'+PageName+'='+ii+' title=下十页&..&/a& ');&if(requestpage==MaxPage)&&document.write('&');&else&&document.write('&a href=?'+PageName+'='+MaxPage+' title=尾页&&&/a&');}&document.write('&/font&&&input class="sBut" type="text" size="1" name="page" value="'+requestpage+'" class="PageInput"&&&input class="sBut" type="button" value="GO"& &');}调用示范Dim Net = New NetPage&&&&&&& ConnStr = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" & Server.MapPath("DataBase/RYBBS.mdb")&&&&&&& Dim i As Integer&&&&&&& Net.Jscript = Server.MapPath("Jscript/Pages.js") 'JS分页函数地址&&&&&&& Net.ConnStr = ConnStr '连接数据库&&&&&&& Net.PageSize = 20&'每页显示数&&&&&&& Net.Table = "Test" '表名&&&&&&& Net.Index = "ID" '唯一标识字段名&&&&&&& Net.Column = "ID,Title,Content" '要显示的字段名&&&&&&& Net.Order = "By ID Desc" '排序&&&&&&& Dim RS As DataTable&&&&&&& RS = Net.ShowRecords '调出分页后的记录&&&&&&& Response.Write("&table&")&&&&&&& For i = 0 To RS.Rows.Count - 1&&&&&&&&&&& Response.Write("&tr&" & Chr(13))&&&&&&&&&&& Response.Write("&td&" & RS.Rows(i)(0) & "&/td&&td&" & RS.Rows(i)(1) & "&/td&&td&" & RS.Rows(i)(2) & "&/td&" & Chr(13))&&&&&&&&&&& Response.Write("&/tr&" & Chr(13))&&&&&&& Next&&&&&&& Response.Write("&table&" & Chr(13))&&&&&&& Response.Write(Net.ShowPage("ID=20&") & "&br&") 'ID=20&为一同传递的其它分页参数&&&&&&& Response.Write(FormatNumber(Timer - Run, 6))
( 00:30:41)
( 01:37:59)
( 01:37:50)
( 01:37:49)
( 01:37:38)
( 01:37:37)
( 01:37:34)
( 01:37:31)
相关排行总榜ASP.net的PDF打印(水晶报表)(表里含有多行数据,而且分页,带图片)
这个需求其实很普遍,首先打印用PDF的确要比excel要方便的多,至少格式不需要用户再处理了。但是pdf的打印如果用一种画图的方法,就太太麻烦了。最后尝试了用水晶报表转,的确很方便很方便,不应该说太简单了。所以我把做的最复杂的报表给做个小总结。
首先数据集:在App_Code里(适合net2005)新建一个数据集*.xcd(其实在哪建都可以),在服务器资源管理器里面,拉下来一个表到数据集里,如果你要改变字段或添加字段都可以,这样一个页面你要显示的所有的数据都在这个数据集里面。如果你要多行多列,而且分好页面,就把所有的字段都贴上去吧,水晶报表是有可以多行分组显示的,但为了页面好看,只能这样了。名字可以按数组来,比如name1,name2等等。
然后水晶报表:做一个rpt的文件,在字段管理器里点数据库字段,在数据库专家里选择ADO.net数据集下面的一个数据集。可以把刚才的数据集拉过来。把每个字段摆在何时的地方。表格我是右键,插入,OLE对象,由文件创建,我在word里面将这个表事先画好了。这样摆在Section3(详细资料里),然后调节里面的字段正好在表格下面。把Section2里面的删除掉,因为不需要上面有个头了。
&&& 页面转成PDF方法:加一个button,在事件里加入如下的代码:
&&&&&&&&&&&&&&&
ReportDocument rptdoc = new ReportDocument();
&&&&&&&&&&&&&&&
rptdoc.Load(MapPath("rpt/YeWuChuLi.rpt"));//水晶报表的相对地址
&&&&&&&&&&&&&&&
string filename = T_ProcessID.Text + ".pdf";//生成PDF的文件名
&&&&&&&&&&&&&&&
string Fname = MapPath("rpt/" + filename);//生成PDF地址
&&&&&&&&&&&&&&&
rptdoc.SetDataSource(dtable);//得到数据源,这个table会在sql语句里把所有的数据都读出来。
&&&&&&&&&&&&&&&
DiskFileDestinationOptions crDiskFileDestinationOptions = new
DiskFileDestinationOptions();
&&&&&&&&&&&&&&&
crDiskFileDestinationOptions.DiskFileName = F
&&&&&&&&&&&&&&&
ExportOptions crExportOptions = rptdoc.ExportO
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
crExportOptions.ExportDestinationOptions =
crDiskFileDestinationOpt
&&&&&&&&&&&&&&&
crExportOptions.ExportDestinationType =
ExportDestinationType.DiskF
&&&&&&&&&&&&&&&
crExportOptions.ExportFormatType =
ExportFormatType.PortableDocF
&&&&&&&&&&&&&&&
rptdoc.Export();//上面代码是将水晶报表转化成PDF
&&&&&&&&&&&&&&&
Response.ClearContent();//下面的代码是弹出这个转换好的pdf文件
&&&&&&&&&&&&&&&
Response.ClearHeaders();
&&&&&&&&&&&&&&&
Response.ContentType = "application/pdf";
&&&&&&&&&&&&&&&
Response.WriteFile(@"rpt/" + filename);
&&&&&&&&&&&&&&&
Response.Redirect(@"rpt/" + filename);
&&&&&&&&&&&&&&&
Response.Flush();
&&&&&&&&&&&&&&&
Response.Close();
&&&&& 注意要加引用在最上面
&&&&& using
CrystalDecisions.CrystalReports.E
&&&&& using CrystalDecisions.S
那么这个数据源看怎么做了,当然,最简单的就是一个查询语句付给这个DataTable里就完成了。
当表里还有表的时候,就要首先把所有的表都查询出来,放在不同的DataTable里,例如我这个表里,首先有一个总体的介绍设备,一个表的数据,管道是一个表里要显示5个管道信息,阀门一个表里有3个管道的信息等等,整压器里面要显示2个整压器,而如果管道多于5个要第二个表里显示。这样打印的时候,就都看到了。
因为水晶报表是按表的列来填入数据的,无法把行读出来,所以这里面有一个关于把行转化成列的sql语句。比较有意思。
&&&&& 举例 一个数据库的表
&&&&&&&&&&Name&&&sex&&&&birthday
&&&&&&&&&&&
aa&&&& bb&&&&&
&&&&&&&&&&&&dd&&&&
ee&&&&&&ff
&&&&&&&&&&&
gg&&&& hh&&&&&
&&&&&&&&&&&
jj&&&&&&&kk&&&&&&ll
&&&&&&&&&&&
mm&&&&nn&&&&& oo
& 要变成:
&&&&&& Name1&
sex1&& birthday1 Name2& sex2 birthday2 Name3 sex3
cc&&&&&&&&
dd&&&&&& ee&&&&
ff&&&&&&&&&&
gg&&&&& hh&& ii
kk&&&&&&&&
ll&&&&&&&&&&&
mm&&&& nn&&&&
oo&&&&&&&&&
Null&&& Null& Null
SQL&语句&&&&&&
select (id-1)/3,
Name1 =& max(case when id%3 = 1 then Name else null
Name1 =& max (case when id%3 = 2 then Name else null
Name1 =& max (case when id%3 = 0 then Name else null
Sex1 =& max(case when id%3 = 1 then Type else null end),
Sex2&=& max (case when id%3 = 2 then Type else null
Sex3&=& max (case when id%3 = 0 then Type else null
Birthday1&=& max(case when id%3 = 1 then Quantity else
null end),
Birthday2 =& max (case when id%3 = 2 then Quantity else null
Birthday3&=& max (case when id%3 = 0 then Quantity else
null end),
from (SELECT row_number() over(order by dbo.表名.Name) as id,表名.*
FROM dbo.表名 where ID='" + processid + "') tt group by
(id-1)/3";
然后解决分页的问题
这三个表首先要看谁的表的行数多,就按照行数多的那个作为循环,将所有的数据都拼在一个表里面
例如:&&&&&
&&&&&&&&&&&&&&&
DataTable dtable = new DataT
&&&&&&&&&&&&&&&
//#region 用气设备
&&&&&&&&&&&&&&&
DataTable gasdevicedt =
getgasdevicebyprocessid(T_ProcessID.Text);
&&&&&&&&&&&&&&&
//#region 报警设备
&&&&&&&&&&&&&&&
DataTable Alertdevicedt =
GetAlertdeviceByProcessID(T_ProcessID.Text);
&&&&&&&&&&&&&&&
//#region 计量表
&&&&&&&&&&&&&&&
DataTable meadevicedt = getmeadevice(T_ProcessID.Text);
&&&&&&&&&&&&&&&
//#region 调压器
&&&&&&&&&&&&&&&
DataTable boosterdt =
getboosterbyprocessid(T_ProcessID.Text);
&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
int k = 最多行的表.Rows.C
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
for (int i = 0; i &= i++)
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
DataRow row = dtable.NewRow();
&&&&&&&&&&&&&&&&&&&
row["ProjectName"] = T_ProjectName.T
&&&&&&&&&&&&&&&&&&&
row["NodeEndTime"] = D_NodeEndTime.T
&&&&&&&&&&&&&&&&&&&
row["NameA"] = gasdevicedt.Rows[i]["NameA"].ToString();
&&&&&&&&&&&&&&&&&&&
row["NameB"] = gasdevicedt.Rows[i]["NameB"].ToString();
&&&&&&&&&&&&&&&&&&&
row["NameC"] = gasdevicedt.Rows[i]["NameC"].ToString();
&&&&&&&&&&&&&&&&&&&
row["NameD"] = gasdevicedt.Rows[i]["NameD"].ToString();
&&&&&&&&&&&&&&&&&&&
row["NameE"] = gasdevicedt.Rows[i]["NameE"].ToString();
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
row["AlertDeNameA"] =
Alertdevicedt.Rows[i]["AlertDeNameA"].ToString();
&&&&&&&&&&&&&&&&&&&
row["AlertDeNameB"] =
Alertdevicedt.Rows[i]["AlertDeNameB"].ToString();
&&&&&&&&&&&&&&&&&&&
row["AlertDeNameC"] =
Alertdevicedt.Rows[i]["AlertDeNameC"].ToString();
&&&&&&&&&&&&&&&&&&&
row["PipNameA"] = meadevicedt.Rows[i]["PipNameA"].ToString();
&&&&&&&&&&&&&&&&&&&
row["PipNameB"] = meadevicedt.Rows[i]["PipNameA"].ToString();
&&&&&&&&&&&&&&&&&&&
dtable.Rows.Add(row);
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
dtable.AcceptChanges();
这个Table的数据源就好了
这样就可以显示出来要的PDF了
水晶报表显示图片:
&&&&&& ReportDocument rptdoc =
new ReportDocument();
rptdoc.Load(MapPath("PipelineHandover.rpt"));
&&&&&&& HandOverSet ds =
_HandOver1.GetSingleHandOverByPHID(Convert.ToInt32(Request.QueryString["PHID"]));
&&&&&&& if
(ds.HandOver.Rows[0]["PipelinePic"].ToString() == "")
&&&&&&&&&&&
ds.HandOver.Rows[0]["PipelinePic"] = "nopic.gif";
&&&&&&& FileStream fs = new
FileStream(MapPath("../images/pics/" +
ds.HandOver.Rows[0]["PipelinePic"].ToString()), FileMode.Open); //
创建文件流
&&&&&&& BinaryReader br = new
BinaryReader(fs);
ds.HandOver.Rows[0]["img"] =
br.ReadBytes((int)br.BaseStream.Length);
rptdoc.SetDataSource(ds);
&&&&&&& crv.ReportSource =
打印的时候只要那个ds出来了,就都出来了,下面的字段是不弹出来pdf页面,直接就在打印机里出来了。
System.Drawing.Printing.PrintDocument printDocument = new
System.Drawing.Printing.PrintDocument();
rptdoc.PrintOptions.PrinterName =
printDocument.PrinterSettings.PrinterN
rptdoc.PrintToPrinter(1, true, 1, 1);
以上的方法,在ASP.net里应该足够用了吧,当然有更简单的方法也好,我也用过一个很牛的控件,感觉是“画”一个pdf很灵活,但过于复杂。呵呵。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。您所在的位置: &
浅述asp.net海量分页数据存储过程
浅述asp.net海量分页数据存储过程
谁伴我闯荡。
数据分页是Web应用程序开发中经常使用的一种技术,也是提高Web数据访问性能的主要手段。本文结合ASP.NET,详细给出了两种ASP.NET海量分页数据的技术。
数据分页是Web应用程序开发中经常使用的一种技术,也是提高Web数据访问性能的主要手段。本文结合ASP.NET,详细给出了两种ASP.NET海量分页数据存储的技术。
CREATE&PROCEDURE&pagination& &@tblName&varchar(255),&&@strGetFields&varchar(1000)&=&'*',&&@fldName&varchar(255)='',&&@PageSize&int&,&&@PageIndex&int,&&@doCount&bit&,&&@OrderType&bit&,&&@strWhere&varchar(1500)&=&''&&AS& &declare&@strSQL&varchar(5000)&&declare&@strTmp&varchar(110)&&declare&@strOrder&varchar(400)&&&if&@doCount&!=&0& &begin& &if&@strWhere&!=''& &set&@strSQL&=&&select&count(*)&as&Total&from&[&&+&@tblName&+&&]&where&&+@strWhere& &else& &set&@strSQL&=&&select&count(*)&as&Total&from&[&&+&@tblName&+&&]&& &end& &&else& &begin& &&if&@OrderType&!=&0& &begin& &set&@strTmp&=&&&(select&min&& &set&@strOrder&=&&&order&by&[&&+&@fldName&+&]&desc&& &&end& &else& &begin& &set&@strTmp&=&&&(select&max&& &set&@strOrder&=&&&order&by&[&&+&@fldName&+&]&asc&& &end& &&if&@PageIndex&=&1& &begin& &if&@strWhere&!=&''& &set&@strSQL&=&&select&top&&&+&str(@PageSize)&+&&&+@strGetFields+&&&from&[&&+&@tblName&+&&]&where&&&+&@strWhere&+&&&&&+&@strOrder& &else& &set&@strSQL&=&&select&top&&&+&str(@PageSize)&+&&&+@strGetFields+&&&from&[&+&@tblName&+&&]&&+&@strOrder& &&end& &else& &begin& &&set&@strSQL&=&&select&top&&&+&str(@PageSize)&+&&&+@strGetFields+&&&from&[&& &+&@tblName&+&&]&where&[&&+&@fldName&+&&]&&+&@strTmp&+&&([&+&@fldName&+&&])&from&(select&top&&&+&str((@PageIndex-1)*@PageSize)&+&&&[&+&@fldName&+&&]&from&[&&+&@tblName&+&&]&&+&@strOrder&+&&)&as&tblTmp)&+&@strOrder& &&if&@strWhere&!=&''& &set&@strSQL&=&&select&top&&&+&str(@PageSize)&+&&&+@strGetFields+&&&from&[&& &+&@tblName&+&&]&where&[&&+&@fldName&+&&]&&+&@strTmp&+&&([&& &+&@fldName&+&&])&from&(select&top&&&+&str((@PageIndex-1)*@PageSize)&+&&&[&& &+&@fldName&+&&]&from&[&&+&@tblName&+&&]&where&&&+&@strWhere&+&&&&& &+&@strOrder&+&&)&as&tblTmp)&and&&&+&@strWhere&+&&&&&+&@strOrder& &end& &end& &exec&(@strSQL) &GO &&调用的程序(为了通用性,我写了一个方法,大家可以提意见,也可以对其进行修改,多多交换意见,共同进步) &&&private&static&DataSet&GetCustomersData(string&tblName,&string&strGetFields,string&fldName,&int&PageSize,&int&PageIndex,&int&doCount,&int&OrderType,&string&strWhere) &{ &&&&&string&connString&=&ConfigurationSettings.AppSettings[&connstr&]; &&&&&SqlConnection&conn&=&new&SqlConnection(connString); &&&&&SqlCommand&comm&=&new&SqlCommand(&pagination3&,&conn); &&&&&&comm.Parameters.Add(new&SqlParameter(&@tblName&,&SqlDbType.VarChar));//表名 &&&&&comm.Parameters[0].Value&=tblName&; &&&&&comm.Parameters.Add(new&SqlParameter(&@strGetFields&,&SqlDbType.VarChar));//返回的列 &&&&&comm.Parameters[1].Value&=&strGetF &&&&&comm.Parameters.Add(new&SqlParameter(&@fldName&,&SqlDbType.VarChar));//排序的字段名 &&&&&comm.Parameters[2].Value&=&fldN &&&&&comm.Parameters.Add(new&SqlParameter(&@PageSize&,SqlDbType.Int));//页尺寸 &&&&&comm.Parameters[3].Value&=&PageS &&&&&comm.Parameters.Add(new&SqlParameter(&@PageIndex&,&SqlDbType.Int));//页码 &&&&&comm.Parameters[4].Value&=&PageI &&&&&comm.Parameters.Add(new&SqlParameter(&@doCount&,&SqlDbType.Int));//是否返回记录总数,0为不返回,1为返回 &&&&&comm.Parameters[5].Value&=&doC &&&&&comm.Parameters.Add(new&SqlParameter(&@OrderType&,&SqlDbType.Int));//设置排序类型,0为升序,非0为降序 &&&&&comm.Parameters[6].Value&=&OrderT &&&&&comm.Parameters.Add(new&SqlParameter(&@strWhere&,&SqlDbType.VarChar));//where语句 &&&&&comm.Parameters[7].Value&=&strW &&&&&mandType&=&CommandType.StoredP &&&&&SqlDataAdapter&dataAdapter&=&new&SqlDataAdapter(comm); &&&&&DataSet&ds&=&new&DataSet(); &&&&&dataAdapter.Fill(ds); &&&&&return& &}&
CREATE&PROCEDURE&[dbo].[GetRecordFromPage]& &&&&&@SelectList&&&&&&&&&&&&VARCHAR(2000),&&&&&&&&&@TableSource&&&&&&&&VARCHAR(100),&&&&&&&&&@SearchCondition&&&&VARCHAR(2000),&&&&&&&&&@OrderExpression&&&&VARCHAR(1000),&&&&&&&&&@PageIndex&&&&&&&&&&&&INT&=&1,&&&&&&&&&&&&&@PageSize&&&&&&&&&&&&INT&=&10&&&&&&&&&AS& &BEGIN&&&&&IF&@SelectList&IS&NULL&OR&LTRIM(RTRIM(@SelectList))&=&''&&&&&BEGIN&&&&&&&&&SET&@SelectList&=&'*'&&&&&END&&&&&PRINT&@SelectList &&&&& &&&&&SET&@SearchCondition&=&ISNULL(@SearchCondition,'') &&&&&SET&@SearchCondition&=&LTRIM(RTRIM(@SearchCondition)) &&&&&IF&@SearchCondition&&&&''&&&&&BEGIN&&&&&&&&&IF&UPPER(SUBSTRING(@SearchCondition,1,5))&&&&'WHERE'&&&&&&&&&BEGIN&&&&&&&&&&&&&SET&@SearchCondition&=&'WHERE&'&+&@SearchCondition &&&&&&&&&END&&&&&END&&&&&PRINT&@SearchCondition &&&&&&SET&@OrderExpression&=&ISNULL(@OrderExpression,'') &&&&&SET&@OrderExpression&=&LTRIM(RTRIM(@OrderExpression)) &&&&&IF&@OrderExpression&&&&''&&&&&BEGIN&&&&&&&&&IF&UPPER(SUBSTRING(@OrderExpression,1,5))&&&&'WHERE'&&&&&&&&&BEGIN&&&&&&&&&&&&&SET&@OrderExpression&=&'ORDER&BY&'&+&@OrderExpression &&&&&&&&&END&&&&&END&&&&&PRINT&@OrderExpression &&&&&&IF&@PageIndex&IS&NULL&OR&@PageIndex&&&1 &&&&&BEGIN&&&&&&&&&SET&@PageIndex&=&1 &&&&&END&&&&&PRINT&@PageIndex &&&&&IF&@PageSize&IS&NULL&OR&@PageSize&&&1 &&&&&BEGIN&&&&&&&&&SET&@PageSize&=&10 &&&&&END&&&&&PRINT&&@PageSize &&&&&&DECLARE&@SqlQuery&VARCHAR(4000) &&&&&&SET&@SqlQuery='SELECT&'+@SelectList+',RowNumber& &&&&&FROM& &&&&&&&&&(SELECT&'&+&@SelectList&+&',ROW_NUMBER()&OVER(&'+&@OrderExpression&+')&AS&RowNumber& &&&&&&&&&&&FROM&'+@TableSource+'&'+&@SearchCondition&+')&AS&RowNumberTableSource& &&&&&WHERE&RowNumber&BETWEEN&'&+&CAST(((@PageIndex&-&1)*&@PageSize+1)&AS&VARCHAR)& &&&&&+&'&AND&'&+& &&&&&CAST((@PageIndex&*&@PageSize)&AS&VARCHAR)& &&&&&&PRINT&@SqlQuery &&&&&SET&NOCOUNT&ON&&&&&EXECUTE(@SqlQuery) &&&&&SET&NOCOUNT&OFF&& &&&&&RETURN&@@RowCount &END&
原文链接:/wdy6279/archive//2032448.html
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&的更多文章
“虚拟”是新千年里最为流行的词语,人们常常会接触到虚拟现
数据库产品
数据库综合
数据库新闻
维基百科将切换到另外一款开源数据库MariaDB
生活中,有各种点滴的时间值得我们去记录,这个专题主
这一专题主要是讨论关于数据库设计的内容,包含数据库
本专题将带领大家走入MongoDB的世界,了解MongoDB是怎
本书全面翔实地介绍了各种病毒的原理,以操作系统的发展为主线,结合病毒的发展过程来综合分析病毒。在分析工具上,较多地利用了
51CTO旗下网站}

我要回帖

更多关于 asp.net 循环输出列 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信