分享
 
 
 

ASP.net中的Datagrid自定义分页功能

王朝asp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

看到在CSDN中已经有了不少自定义分页的例子,参考了很多,但是老觉得别人写的功能不是很完备,自己也摸索的写了一个,主要参考了“孟子E章”的分页例子。

这里使用的是VB.net语言。

DataGridPaging.aspx

参考下面我的回复中,这里帖不上代码。

DataGridPaging.aspx.vb

Imports System.Data.SqlClient

Imports System.Data

Imports System.Web.UI

Public Class DataGridPaging

Inherits System.Web.UI.Page

Protected WithEvents btnFirst As System.Web.UI.WebControls.LinkButton

Protected WithEvents btnPrev As System.Web.UI.WebControls.LinkButton

Protected WithEvents btnNext As System.Web.UI.WebControls.LinkButton

Protected WithEvents btnLast As System.Web.UI.WebControls.LinkButton

Protected WithEvents lblCurrentIndex As System.Web.UI.WebControls.Label

Protected WithEvents lblPageCount As System.Web.UI.WebControls.Label

Protected WithEvents lblRegisterCount As System.Web.UI.WebControls.Label

Protected WithEvents DataGrid As System.Web.UI.WebControls.DataGrid

Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid

#Region " Web Form Designer Generated Code "

'This call is required by the Web Form Designer.

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init

'CODEGEN: This method call is required by the Web Form Designer

'Do not modify it using the code editor.

InitializeComponent()

End Sub

#End Region

Dim cnn As New SqlConnection("Password=; User ID=sa;Initial Catalog=northwind;Data Source=localhost;Connect Timeout=30")

Dim adp As New SqlDataAdapter

Dim cmd As New SqlCommand

Dim ds As New DataSet

' Dim intStartIndex As Long

'定义全局静态变量,记录选中页面之前的总记录数

Private Shared preceding As Long

Private Shared gridPageSize As Int16

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

btnFirst.Text = "最首页"

btnPrev.Text = "前一页"

btnNext.Text = "下一页"

btnLast.Text = "最后页"

If Not IsPostBack Then

Try

Dim cmd As New SqlCommand("select count(*) from products", cnn)

cnn.Open()

'设置在使用自定义分页时 DataGrid 控件中的实际项数。

'Dim i As Int16

'i = cmd.ExecuteScalar()

'MyDataGrid.VirtualItemCount=(i / MyDataGrid.PageSize)

DataGrid1.VirtualItemCount = cmd.ExecuteScalar()

Catch ex As Exception

Response.Write("<script language=javascript>alert('错误原因:' + exp.tostring() )</script>")

Finally

cnn.Close()

End Try

preceding = DataGrid1.PageSize

BindGrid()

End If

End Sub

Sub BindGrid()

'使用DataSet方法填充DataGrid

Dim str As String = " * "

'Dim gridPageSize As Int16 = DataGrid1.PageSize

gridPageSize = DataGrid1.PageSize

Dim cmdNumber As New SqlCommand("select count(*) from products ", cnn)

Try

cnn.Open()

'设置在使用自定义分页时 DataGrid 控件中.VirtualItemCount存放总的实际项数。

DataGrid1.VirtualItemCount = cmdNumber.ExecuteScalar()

'使用求余保证最后一页的合理显示

If preceding >= DataGrid1.VirtualItemCount Then

gridPageSize = DataGrid1.VirtualItemCount Mod DataGrid1.PageSize

If gridPageSize = 0 Then

gridPageSize = DataGrid1.PageSize

End If

End If

str = "select " + str + " from( select top " & gridPageSize.ToString + str + " from( select top " + CStr(preceding) + str + " from products where productID >0 order by productID ) as p order by productID desc )as p order by productID "

Cmd.CommandText = str

Cmd.Connection = cnn

adp.SelectCommand = Cmd

'adp = New SqlDataAdapter(str, cnn)

adp.Fill(ds, "products")

DataGrid1.DataSource = ds.Tables("products").DefaultView

DataGrid1.DataBind()

Catch ex As Exception

Response.Write("错误原因:" + ex.ToString())

'Throw ex

Finally

If cnn.State = ConnectionState.Open Then

cnn.Close()

End If

End Try

ShowStats()

HideButton()

End Sub

' ------------------------------------------- 下面是分页功能 -----------------------------------------------

Sub DataGrid1_Page(ByVal sender As Object, ByVal e As DataGridPageChangedEventArgs)

'点击GRID某一页时发生

'GridXQ.aspx中DataGrid 的 OnPageIndexChanged="DataGrid1_Page"

preceding = (e.NewPageIndex + 1) * DataGrid1.PageSize

DataGrid1.CurrentPageIndex = e.NewPageIndex

BindGrid()

ShowStats()

HideButton()

End Sub

Sub PagerButtonClick(ByVal sender As Object, ByVal e As EventArgs)

'used by external paging UI

'页面上Grid下方 linkbutton 的 onclick="PagerButtonClick" CommandArgument="next/prev/last/……"

Dim arg As String = sender.CommandArgument

Select Case arg

Case "next"

If (DataGrid1.CurrentPageIndex <= (DataGrid1.PageCount - 1)) Then

DataGrid1.CurrentPageIndex += 1

If DataGrid1.CurrentPageIndex = DataGrid1.PageCount - 1 Then

preceding = DataGrid1.VirtualItemCount

Else

preceding += gridPageSize

End If

End If

Case "prev"

If (DataGrid1.CurrentPageIndex > 0) Then

If DataGrid1.CurrentPageIndex = DataGrid1.PageCount - 1 Then

preceding = (DataGrid1.PageCount - 1) * DataGrid1.PageSize

Else

preceding -= gridPageSize

End If

DataGrid1.CurrentPageIndex -= 1

End If

Case "last"

DataGrid1.CurrentPageIndex = (DataGrid1.PageCount - 1)

preceding = DataGrid1.VirtualItemCount

Case Else

'page number 因为在button.commandArgument设置为0

DataGrid1.CurrentPageIndex = System.Convert.ToInt32(arg)

preceding = DataGrid1.PageSize

End Select

If (DataGrid1.CurrentPageIndex = (DataGrid1.PageCount - 1)) Then

btnNext.Enabled = False

Else

btnNext.Enabled = True

End If

If (DataGrid1.CurrentPageIndex = 0) Then

btnPrev.Enabled = False

Else

btnPrev.Enabled = True

End If

BindGrid()

ShowStats()

HideButton()

End Sub

Sub ShowStats()

lblCurrentIndex.Text = "第 " + (DataGrid1.CurrentPageIndex + 1).ToString() + " 页"

lblPageCount.Text = "总共 " + DataGrid1.PageCount.ToString() + " 页"

lblRegisterCount.Text = "共有 " + DataGrid1.VirtualItemCount.ToString + " 条记录"

End Sub

Sub HideButton()

If (DataGrid1.CurrentPageIndex = (DataGrid1.PageCount - 1)) Then

btnNext.Enabled = False

btnLast.Enabled = False

Else

btnNext.Enabled = True

btnLast.Enabled = True

End If

If (DataGrid1.CurrentPageIndex = 0) Then

btnPrev.Enabled = False

btnFirst.Enabled = False

Else

btnPrev.Enabled = True

btnFirst.Enabled = True

End If

End Sub

End Class

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有