datagrid分页问题(前后跳页)《控件版》

把它定义在用户控件中的。在。ASCX中写的。

在CSDN上看了很多的DATAGRID分页问题,当然DATAGRID有自己的分页项,功能是很有限的,我也在CSDN上看了很多自己分页的代码,发现都是用C#写的,我写了一个用ASP。NET中VB语言写的。以下代码供大家参考。

HTML代码:

1@ Control Language="vb" AutoEventWireup="false" Codebehind="DataGridPage.ascx.vb" Inherits="datagridfenye.DataGridPage" TargetSchema=" http://schemas.microsoft.com/intellisense/ie5 " 
1<link href="../css/style.css" rel="stylesheet" type="text/css"/>
1<font face="MS UI Gothic"></font>
1<asp:panel cssclass="font2" forecolor="Blue" horizontalalign="Left" id="divPanel" runat="server" visible="True" width="84.16%">
2<asp:button backcolor="#E0E0E0" borderstyle="Ridge" borderwidth="1px" causesvalidation="False" commandname="FIRST" font-size="XX-Small" id="btnNavFirst" runat="server" text="初頁"></asp:button>
3<asp:button backcolor="#E0E0E0" borderstyle="Ridge" borderwidth="1px" causesvalidation="False" commandname="PREVIOUS" font-size="XX-Small" id="btnNavPrevious" runat="server" text="前頁"></asp:button>
4<asp:button backcolor="#E0E0E0" borderstyle="Ridge" borderwidth="1px" causesvalidation="False" commandname="NEXT" font-size="XX-Small" id="btnNavNext" runat="server" text="次頁"></asp:button>
5<asp:button backcolor="#E0E0E0" borderstyle="Ridge" borderwidth="1px" causesvalidation="False" commandname="LAST" font-size="XX-Small" id="btnNavLast" runat="server" text="末頁"></asp:button><input id="hdRowCount" name="Hidden1" runat="server" size="1" style="WIDTH: 43px; HEIGHT: 22px" type="hidden"/> <input id="hdCurrentIndex" name="Hidden1" runat="server" size="2" style="WIDTH: 48px; HEIGHT: 22px" type="hidden" value="0"/>
6<asp:label forecolor="Blue" id="LabelMsg" runat="server" width="232px"></asp:label>GOTO   
7<asp:textbox id="tbPage" runat="server" width="31px"></asp:textbox>
8<asp:label forecolor="Blue" id="LabelMsg2" runat="server">頁</asp:label>
9<asp:button backcolor="#E0E0E0" borderstyle="Ridge" borderwidth="1px" causesvalidation="False" commandname="GO" font-size="XX-Small" id="btnNavGo" runat="server" text="確定"></asp:button></asp:panel>
1@ Control Language="vb" AutoEventWireup="false" Codebehind="DataGridPage.ascx.vb" Inherits="datagridfenye.DataGridPage" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" 

WEB代码:

Imports System
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports System.Web
Imports System.Web.UI.WebControls
Imports System.Web.UI.HtmlControls
Public Delegate Sub BindDataDelegate()
Public Class DataGridPage

Inherits System.Web.UI.UserControl

#Region " Web フォーム デザイナで生成されたコード "

'この呼び出しは Web フォーム デザイナで必要です。

  1<system.diagnostics.debuggerstepthrough()> Private Sub InitializeComponent() 
  2
  3End Sub 
  4
  5Public binddata1 As BindDataDelegate   
  6Private _dg As DataGrid   
  7Private _autohidden As Boolean = True   
  8Private _pagesize As Integer = 10   
  9Private _itemcount As Integer = 0   
 10Private _dispStyle As Integer = 1   
 11Protected WithEvents LabelMsg As System.Web.UI.WebControls.Label   
 12Protected WithEvents btnNavFirst As System.Web.UI.WebControls.Button   
 13Protected WithEvents btnNavPrevious As System.Web.UI.WebControls.Button   
 14Protected WithEvents btnNavNext As System.Web.UI.WebControls.Button   
 15Protected WithEvents btnNavLast As System.Web.UI.WebControls.Button   
 16Protected WithEvents tbPage As System.Web.UI.WebControls.TextBox   
 17Protected WithEvents LabelMsg2 As System.Web.UI.WebControls.Label   
 18Protected WithEvents btnNavGo As System.Web.UI.WebControls.Button   
 19Protected WithEvents divPanel As System.Web.UI.WebControls.Panel   
 20Protected WithEvents hdRowCount As System.Web.UI.HtmlControls.HtmlInputHidden   
 21Protected WithEvents hdCurrentIndex As System.Web.UI.HtmlControls.HtmlInputHidden 
 22
 23'メモ : 次のプレースホルダ宣言は Web フォーム デザイナで必要です。   
 24'削除および移動しないでください。   
 25Private designerPlaceholderDeclaration As System.Object 
 26
 27Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init   
 28' CODEGEN: このメソッド呼び出しは Web フォーム デザイナで必要です。   
 29' コード エディタを使って変更しないでください。   
 30InitializeComponent()   
 31AddHandler Me.Load, AddressOf Page_Load 
 32
 33End Sub 
 34
 35#End Region 
 36
 37Public Property Target() As DataGrid 
 38
 39Get   
 40Return _dg   
 41End Get   
 42Set(ByVal Value As DataGrid)   
 43_dg = Value   
 44End Set   
 45End Property   
 46Public Property AutoHidden() As Boolean 
 47
 48Get   
 49Return _autohidden   
 50End Get   
 51Set(ByVal Value As Boolean)   
 52_autohidden = Value   
 53End Set   
 54End Property 
 55
 56Public Property PageSize() As Integer 
 57
 58Get   
 59Return _pagesize   
 60End Get   
 61Set(ByVal Value As Integer)   
 62_pagesize = Value   
 63End Set   
 64End Property   
 65Public Property ItemCount() As Integer 
 66
 67Get   
 68Return _itemcount   
 69End Get   
 70Set(ByVal Value As Integer)   
 71_itemcount = Value   
 72End Set   
 73End Property 
 74
 75Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load   
 76' ページを初期化するユーザー コードをここに挿入します。 
 77
 78End Sub   
 79Public Sub SetTarget(ByVal adg As DataGrid, ByRef aBindData1 As BindDataDelegate) 
 80
 81_dg = adg 
 82
 83binddata1 = aBindData1 
 84
 85AddHandler btnNavFirst.Click, AddressOf NavigationButtonClick   
 86AddHandler btnNavPrevious.Click, AddressOf NavigationButtonClick   
 87AddHandler btnNavNext.Click, AddressOf NavigationButtonClick   
 88AddHandler btnNavLast.Click, AddressOf NavigationButtonClick   
 89AddHandler btnNavGo.Click, AddressOf NavigationButtonClick   
 90AddHandler _dg.DataBinding, AddressOf zxDataBinding   
 91binddata1()   
 92End Sub   
 93Public Sub SetStyle(ByVal aPageSize As Integer, ByVal aAutoHidden As Boolean, ByVal aDispStyle As Integer) 
 94
 95_pagesize = aPageSize   
 96_autohidden = aAutoHidden   
 97_dispStyle = aDispStyle 
 98
 99divPanel.Visible = Not aAutoHidden   
100End Sub   
101Public Sub SetStyle(ByVal aPageSize As Integer, ByVal aAutoHidden As Boolean)   
102SetStyle(aPageSize, aAutoHidden, 1)   
103End Sub   
104Public Sub SetStyle(ByVal aPageSize As Integer)   
105SetStyle(aPageSize, True)   
106End Sub   
107Public Sub NavigationButtonClick(ByVal sender As Object, ByVal e As System.EventArgs)   
108Dim direction As String   
109direction = sender.CommandName 
110
111Select Case (direction.ToUpper()) 
112
113Case ("FIRST")   
114_dg.CurrentPageIndex = 0 
115
116Case ("PREVIOUS")   
117_dg.CurrentPageIndex = Math.Max(_dg.CurrentPageIndex - 1, 0) 
118
119Case ("NEXT")   
120_dg.CurrentPageIndex = Math.Min(_dg.CurrentPageIndex + 1, _dg.PageCount - 1) 
121
122Case ("LAST")   
123_dg.CurrentPageIndex = Math.Max(_dg.PageCount - 1, 0) 
124
125Case ("GO")   
126Try   
127_dg.CurrentPageIndex = Math.Min(_dg.PageCount - 1, CInt(tbPage.Text) - 1)   
128tbPage.Text = ""   
129Catch   
130tbPage.Text = ""   
131End Try 
132
133End Select 
134
135binddata1() 
136
137End Sub   
138Public Sub zxDataBinding(ByVal sender As Object, ByVal e As System.EventArgs) 
139
140Dim newCount As Integer = 0   
141Dim PageCount As Integer = 0 
142
143If (_dg.DataSource Is "null") Then 
144
145SetButtonState(0)   
146Exit Sub   
147End If   
148If (_dg.DataSource.GetType().ToString().ToLower() = "system.data.datatable") Then 
149
150newCount = _dg.DataSource.Rows.Count 
151
152ElseIf (_dg.DataSource.GetType().ToString().ToLower() = "system.data.dataview") Then 
153
154newCount = _dg.DataSource.Count 
155
156ElseIf (_dg.DataSource.GetType().ToString().ToLower() = "system.data.dataset") Then 
157
158newCount = _dg.DataSource.Tables(0).Rows.Count   
159End If 
160
161If (newCount &gt; 0) Then   
162PageCount = CInt((newCount - 1) / _pagesize)   
163If (_dg.CurrentPageIndex &gt; PageCount - 1) Then   
164_dg.CurrentPageIndex = PageCount - 1   
165End If   
166Else 
167
168PageCount = 0   
169_dg.CurrentPageIndex = 0 
170
171End If 
172
173Select Case (_dispStyle) 
174
175Case 1   
176LabelMsg.Text = "共" + PageCount.ToString() + "頁 第" + (_dg.CurrentPageIndex + 1).ToString() + "頁"   
177LabelMsg.Text += " 總記?數:" + newCount.ToString() + "" 
178
179Case 2   
180LabelMsg.Text = (_dg.CurrentPageIndex + 1).ToString() + "/" + PageCount.ToString() + "頁"   
181LabelMsg.Text += " 總數:" + newCount.ToString() 
182
183End Select 
184
185If (_autohidden) Then 
186
187divPanel.Visible = ((newCount - 1) / _pagesize &gt; 0) 
188
189Else 
190
191divPanel.Visible = True 
192
193End If 
194
195SetButtonState(PageCount)   
196End Sub   
197Public Sub SetButtonState(ByVal _PageCount As Integer) 
198
199btnNavFirst.Enabled = (_dg.CurrentPageIndex &gt; 0)   
200btnNavPrevious.Enabled = (_dg.CurrentPageIndex &gt; 0)   
201btnNavNext.Enabled = (_dg.CurrentPageIndex &lt; _PageCount - 1)   
202btnNavLast.Enabled = (_dg.CurrentPageIndex &lt; _PageCount - 1)   
203End Sub 
204
205  
206End Class</system.diagnostics.debuggerstepthrough()>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus