DataGrid 存储过程的分页

<%@ import namespace="system.data.sqlclient" %>
<%@ import namespace="system.data" %>

<script runat="server">

dim connorthwind as sqlconnection
dim strsql as string
dim strselect as string
dim intstartindex as integer
dim intendindex as integer
dim intrecordcount as integer
dim cmdsql as sqlcommand

sub page_load
btnfirst.text = "首页"
btnprev.text = "上一页"
btnnext.text = "下一页"
btnlast.text = "末页"
connorthwind = new sqlconnection( "server=192.168.4.1;uid=sa;pwd=111111;database=yourdbname" )
if not ispostback then
    binddatagrid
end if
end sub

sub binddatagrid
dim cmdselect as sqlcommand
dim dtrrecordcount as sqldatareader

intendindex = dgrdproducts.pagesize
cmdselect = new sqlcommand( "newspaged", connorthwind )
cmdselect.commandtype = commandtype.storedprocedure
cmdselect.parameters.add( "@pageindex", intstartindex )
cmdselect.parameters.add( "@pagesize ", intendindex )
connorthwind.open()
dtrrecordcount = cmdselect.executereader()
while dtrrecordcount.read()
    intrecordcount=dtrrecordcount(0)
end while
dgrdproducts.virtualitemcount = (intrecordcount / dgrdproducts.pagesize)
dtrrecordcount.nextresult()
dgrdproducts.datasource = dtrrecordcount
dgrdproducts.databind()
connorthwind.close()
end sub

sub dgrdproducts_pageindexchanged( s as object, e as datagridpagechangedeventargs )
intstartindex = e.newpageindex
dgrdproducts.currentpageindex = e.newpageindex
binddatagrid
end sub
sub pagerbuttonclick(byval sender as object, byval e as eventargs)
dim arg as string = sender.commandargument
select case arg
      case "next"
        if (dgrdproducts.currentpageindex < (dgrdproducts.pagecount - 1)) then
           dgrdproducts.currentpageindex += 1
        end if
      case "prev"
        if (dgrdproducts.currentpageindex > 0) then
           dgrdproducts.currentpageindex -= 1
        end if
      case "last"
           dgrdproducts.currentpageindex = (dgrdproducts.pagecount - 1)
      case else
        page number
        dgrdproducts.currentpageindex = system.convert.toint32(arg)
end select
intstartindex=dgrdproducts.currentpageindex
binddatagrid
end sub

sub dgrdproducts_editcommand( s as object, e as datagridcommandeventargs )
dgrdproducts.edititemindex = e.item.itemindex
intstartindex = dgrdproducts.currentpageindex
binddatagrid
end sub

sub dgrdproducts_updatecommand( s as object, e as datagridcommandeventargs )
dim intarticleid as integer
dim txttopic as textbox
dim txteditor as textbox
dim strtopic as string
dim streditor as string

intarticleid = dgrdproducts.datakeys( e.item.itemindex )
txttopic = e.item.cells( 1 ).controls( 0 )
txteditor = e.item.cells( 2 ).controls( 0 )
strtopic = txttopic.text
streditor = txteditor.text
strsql = "update tb_article set topic=@topic, " _
   & "editor=@editor where articleid=@articleid"
cmdsql = new sqlcommand( strsql, connorthwind )
cmdsql.parameters.add( "@topic", strtopic )
cmdsql.parameters.add( "@editor", streditor )
cmdsql.parameters.add( "@articleid", intarticleid )
connorthwind.open()
cmdsql.executenonquery()
connorthwind.close()
dgrdproducts.edititemindex = -1
binddatagrid
end sub

sub dgrdproducts_cancelcommand( s as object, e as datagridcommandeventargs )
dgrdproducts.edititemindex = -1
binddatagrid
end sub
</script>

<html>
<head><title>datagridcustompaging.aspx</title></head>
<body>
<form runat="server">

<asp:datagrid runat="server"
id="dgrdproducts"
oneditcommand="dgrdproducts_editcommand"
onupdatecommand="dgrdproducts_updatecommand"
oncancelcommand="dgrdproducts_cancelcommand"
datakeyfield="a_articleid"
autogeneratecolumns="false"
showheader="true"
allowpaging="true"
allowcustompaging="true"
headerstyle-backcolor="salmon"
pagesize="10"
onpageindexchanged="dgrdproducts_pageindexchanged"
pagerstyle-mode="numericpages"
alternatingitemstyle-backcolor="#eeaaee"
font-size="10pt"
font-name="verdana"
cellspacing="0"
cellpadding="3"
gridlines="both"
borderwidth="1"
bordercolor="black"
pagerstyle-horizontalalign="right">
<alternatingitemstyle backcolor="#eeeeee"></alternatingitemstyle>
<columns>
    <asp:boundcolumn
      headertext="序列号"
      datafield="articleid"
      readonly="true" />
    <asp:boundcolumn
      headertext="标题"
      datafield="topic" />
    <asp:boundcolumn
      headertext="编辑者"
      datafield="editor" />
    <asp:editcommandcolumn
      edittext="edit!"
      updatetext="update!"
      canceltext="cancel!" />
<asp:hyperlinkcolumn
   headertext="编辑"
   datanavigateurlfield="articleid"
   datanavigateurlformatstring="details.aspx?id={0}"
   text="编辑"/>
</columns>
</asp:datagrid>
<asp:linkbutton id="btnfirst" onclick="pagerbuttonclick" runat="server" font-name="verdana" font-size="8pt" forecolor="navy" commandargument="0"></asp:linkbutton>&nbsp;
<asp:linkbutton id="btnprev" onclick="pagerbuttonclick" runat="server" font-name="verdana" font-size="8pt" forecolor="navy" commandargument="prev"></asp:linkbutton>&nbsp;
<asp:linkbutton id="btnnext" onclick="pagerbuttonclick" runat="server" font-name="verdana" font-size="8pt" forecolor="navy" commandargument="next"></asp:linkbutton>&nbsp;
<asp:linkbutton id="btnlast" onclick="pagerbuttonclick" runat="server" font-name="verdana" font-size="8pt" forecolor="navy" commandargument="last"></asp:linkbutton>
</form>
</html>
下面是存储过程:
create procedure newspaged
(
    @pageindex int,
    @pagesize int
)
as
begin
declare @pagelowerbound int
declare @pageupperbound int
declare @rowstoreturn int

-- first set the rowcount
set @rowstoreturn = @pagesize * (@pageindex + 1)
set rowcount @rowstoreturn

-- set the page bounds
set @pagelowerbound = @pagesize * @pageindex
set @pageupperbound = @pagelowerbound + @pagesize + 1

-- create a temp table to store the select results
create table #pageindex
(
    indexid int identity (1, 1) not null,
    articleid int,
)

-- insert into the temp table
insert into #pageindex (articleid)
select
    articleid
from
    tablename
order by
    articleid desc

-- return total count
select count(articleid) from tablename
-- return paged results
select
    o.articleid,o.topic,editor
from
    tablename o,
    #pageindex pageindex
where
    o.articleid = pageindex.articleid and
    pageindex.indexid > @pagelowerbound and
    pageindex.indexid < @pageupperbound
order by
    pageindex.indexid

end

posted on 2008-07-16 19:54  风乔  阅读(201)  评论(0编辑  收藏  举报

导航