ASPNET:DataGrid+存储过程的分页编辑代码[原创]

原创 2005年05月20日 17:05:00

<%@ 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=XXXXXX;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
  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_DeleteCommand( s As Object, e As DataGridCommandEventArgs )
  Dim strDelete As String
  Dim strArticleID As String
  Dim intCurrentpage As Integer

  strArticleID = dgrdProducts.DataKeys( e.Item.ItemIndex )
  strDelete = "Delete Tb_Article Where ArticleID=@articleID"
  cmdSql = New SqlCommand( strDelete, conNorthwind )
  cmdSql.Parameters.Add( "@articleID", strArticleID )
  Try
  conNorthwind.Open()
  cmdSql.ExecuteNonQuery()
  conNorthwind.Close()
  Catch objException As Exception
    Response.Write( "We're sorry, we are experiencing technical problems..." )
    Response.Write( "<hr>" )
    Response.Write( "<li> Message: " & objException.Message )
    Response.Write( "<li> Source: " & objException.Source )
    Response.Write( "<li> Stack Trace: " & objException.StackTrace )
    Response.Write( "<li> Target Site: " & objException.TargetSite.Name )
  End Try
  If dgrdProducts.CurrentPageIndex=dgrdProducts.PageCount-1 then
    If dgrdProducts.CurrentPageIndex=0 then
      dgrdProducts.CurrentPageIndex = dgrdProducts.PageCount -1
    Else
      If (dgrdProducts.Items.Count MOD dgrdProducts.PageSize) = 1 then
     intCurrentpage=2
   Else
     intCurrentpage=1
   End If
      dgrdProducts.CurrentPageIndex = dgrdProducts.PageCount - intCurrentPage
    End If
  End If
  intStartIndex = dgrdProducts.CurrentPageIndex
  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"
  OnDeleteCommand="dgrdProducts_DeleteCommand"
  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:ButtonColumn
   HeaderText="删除"
      ButtonType="LinkButton"
   Text="Delete!"
   CommandName="Delete" />
 <asp:HyperLinkColumn
   HeaderText="编辑"
   DataNavigateUrlField="ArticleID"
   DataNavigateUrlFormatString="Details.aspx?id="
   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
GO


ASPNET存储过程自定义分页详解

  • 2012年04月10日 00:30
  • 203KB
  • 下载

GridView编辑,更新,取消,排序,全选及存储过程分页

1. GridView的分页(2种方法) a) 内置分页 b) 存储过程分页 2. GridView的排序 3. GridView的全选和全不选 存储过程分页: 存储过程: USE ...

asp.net利用存储过程分页代码

  • 2010年04月19日 15:05
  • 51KB
  • 下载

分页的存储过程代码

  • 2012年03月05日 19:36
  • 1KB
  • 下载

模拟网易邮箱实现全选,全不的功能/使用DataList实现 加入购物车,编辑,删除,更新,取消功能。/试完成Datalist使用存储过程来分页

1模拟网易邮箱实现全选,全不的功能(服务端和客户端) Demo.aspx                 function chage(sender) {             v...

c#分页调用存储过程代码

  • 2014年11月18日 11:10
  • 7KB
  • 下载

asp.net之DataList的使用方法,及分页(存储过程创建),编辑,更新,删除

using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syste...

sql分页存储过程代码(转)

分享一个sql server分页存储过程代码。 分页存储过程: -- ============================================= -- Author: xyy...

Mysql 分页存储过程代码

最近项目是用mysql存储过程,琢磨了下通用的mysql 存储过程分页写法,觉得通用度很高,随笔几下分享。   分页信息列表查询 PROCEDURE xx.p_common_findByPage(I...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASPNET:DataGrid+存储过程的分页编辑代码[原创]
举报原因:
原因补充:

(最多只允许输入30个字)