datalist 分页的用户控件

翻译|其它|编辑:郝浩|2007-05-11 13:16:48.000|阅读 1692 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

listControl.aspx
〈%@ Control Language="vb" AutoEventWireup="false" Codebehind="listControl.ascx.vb" Inherits="govoa.listControl" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %〉
共有〈asp:Label id="lblRecordCount" ForeColor="red" runat="server" /〉条记录 当前为〈asp:Label id="lblCurrentPage" ForeColor="red" runat="server" /〉/〈asp:Label id="lblPageCount" ForeColor="red" runat="server" /〉页
〈asp:LinkButton id="lblPrevious" runat="server" text="上一页"〉〈/asp:LinkButton〉
〈asp:LinkButton id="lblNext" runat="server" text="下一页"〉〈/asp:LinkButton〉
〈asp:DropDownList id="NumPerPage" runat="server" AutoPostBack="True"〉

   〈asp:ListItem Value="5"〉

   5行/页〈/asp:ListItem〉

   〈asp:ListItem Value="8" Selected="True"〉

   8行/页〈/asp:ListItem〉

   〈asp:ListItem Value="10"〉

   10行/页〈/asp:ListItem〉

   〈asp:ListItem Value="15"〉

   15行/页〈/asp:ListItem〉

   〈asp:ListItem Value="20"〉

   20行/页〈/asp:ListItem〉

   〈asp:ListItem Value="25"〉

   25行/页〈/asp:ListItem〉

   〈asp:ListItem Value="30"〉

   30行/页〈/asp:ListItem〉

   〈asp:ListItem Value="35"〉

   35行/页〈/asp:ListItem〉

   〈asp:ListItem Value="40"〉

   40行/页〈/asp:ListItem〉
〈/asp:DropDownList〉
〈asp:TextBox ID="txtPage" Runat="server" Width="30"〉〈/asp:TextBox〉〈asp:Button ID="btnGo" Runat="server" Text="转到"〉〈/asp:Button〉



listControl.aspx.vb

Imports System.Data.SqlClient
Public MustInherit Class listControl

   Inherits System.Web.UI.UserControl

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

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

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

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

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

   Protected WithEvents NumPerPage As System.Web.UI.WebControls.DropDownList

   Protected WithEvents txtPage As System.Web.UI.WebControls.TextBox

   Protected WithEvents btnGo As System.Web.UI.WebControls.Button

   Private m_DataContainer As Repeater

   Private m_datasource As String

   Private m_toRefresh As Boolean = False


   Private MyConn As SqlConnection

   Private RecordCount, PageCount, CurrentPage As Integer



   '/ 〈summary〉

   '/ 取得需要绑定的控件

   '/ 〈/summary〉


   Public Property GetRelatedControl() As Repeater

   Get

   Return m_DataContainer

   End Get

   Set(ByVal Value As Repeater)

   m_DataContainer = Value

   End Set

   End Property


   Public Property ToRefresh() As Boolean

   Get

   Return m_toRefresh

   End Get

   Set(ByVal Value As Boolean)

   m_toRefresh = Value

   End Set

   End Property


   Public Property GetRelatedSqlStr() As String

   Get

   Return m_datasource

   End Get

   Set(ByVal Value As String)

   m_datasource = Value

   If m_toRefresh Then

   refreshData()

   End If

   End Set

   End Property


#Region " Web 窗体设计器生成的代码 "


   '该调用是 Web 窗体设计器所必需的。

   〈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: 此方法调用是 Web 窗体设计器所必需的

   '不要使用代码编辑器修改它。

   InitializeComponent()

   End Sub

#End Region


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

   '在此处放置初始化页的用户代码

   MyConn = New SqlConnection(System.Configuration.ConfigurationSettings.AppSettings("ConnectionString"))

   MyConn.Open()

   ViewState("PageSize") = NumPerPage.SelectedItem.Value.ToString()

   If Not Page.IsPostBack Then

   BindControl()

   CurrentPage = 0

   ViewState("PageIndex") = 0


   '计算总共有多少记录

   RecordCount = CalculateRecord()

   lblRecordCount.Text = RecordCount.ToString()


   '计算总共有多少页

   PageCount = Fix((RecordCount + Int32.Parse(NumPerPage.SelectedItem.Value)) / Convert.ToInt32(ViewState("PageSize").ToString())) - (IIf(RecordCount Mod Convert.ToInt32(ViewState("PageSize").ToString()) 〈〉 0, 0, 1)) 'ToDo: Unsupported feature: conditional (?) operator.

   lblPageCount.Text = PageCount.ToString()

   If PageCount 〈= 1 Then

   lblNext.Enabled = False

   End If

   ViewState("PageCount") = PageCount

   End If

   End Sub


   Private Sub refreshData()

   MyConn = New SqlConnection(System.Configuration.ConfigurationSettings.AppSettings("ConnectionString"))

   MyConn.Open()

   ViewState("PageSize") = NumPerPage.SelectedItem.Value.ToString()


   BindControl()

   CurrentPage = 0

   ViewState("PageIndex") = 0


   '计算总共有多少记录

   RecordCount = CalculateRecord()

   lblRecordCount.Text = RecordCount.ToString()


   '计算总共有多少页


   PageCount = Fix((RecordCount + Int32.Parse(NumPerPage.SelectedItem.Value)) / Convert.ToInt32(ViewState("PageSize").ToString())) - (IIf(RecordCount Mod Convert.ToInt32(ViewState("PageSize").ToString()) 〈〉 0, 0, 1)) 'ToDo: Unsupported feature: conditional (?) operator.

   lblPageCount.Text = PageCount.ToString()

   If PageCount 〈= 1 Then

   lblNext.Enabled = False

   End If

   ViewState("PageCount") = PageCount


   End Sub

   '/ 〈summary〉

   '/ 绑定控件

   '/ 〈/summary〉

   Private Sub BindControl()


   m_DataContainer.DataSource = CreateSource()

   m_DataContainer.DataBind()

   '

   lblNext.Enabled = True

   lblPrevious.Enabled = True

   If CurrentPage = PageCount - 1 Then

   lblNext.Enabled = False

   End If

   If CurrentPage = 0 Then

   lblPrevious.Enabled = False

   End If

   lblCurrentPage.Text = (CurrentPage + 1).ToString()

   txtPage.Text = (CurrentPage + 1).ToString()

   End Sub 'BindControl


   '/ 〈summary〉

   '/ 产生DataList的DataView

   '/ 〈/summary〉

   '/ 〈returns〉〈/returns〉

   Private Function CreateSource() As DataView


   Dim StartIndex As Integer


   '设定导入的起终地址

   StartIndex = CurrentPage * Convert.ToInt32(ViewState("PageSize").ToString()) '计算起始索引

   Dim ds As New DataSet()


   Dim MyAdapter As New SqlDataAdapter(m_datasource, MyConn)

   MyAdapter.Fill(ds, StartIndex, Convert.ToInt32(ViewState("PageSize").ToString()), "Score")


   Return ds.Tables("Score").DefaultView

   End Function 'CreateSource


   '/ 〈summary〉

   '/ 计算有多少记录

   '/ 〈/summary〉

   '/ 〈returns〉〈/returns〉

   Public Function CalculateRecord() As Integer



   Dim ds As New DataSet()


   Dim MyAdapter As New SqlDataAdapter(m_datasource, MyConn)

   MyAdapter.Fill(ds, "tempTable")


   Return ds.Tables("tempTable").DefaultView.Count

   End Function 'CalculateRecord






   Private Sub btnGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGo.Click

   Try

   Dim InputValue As Integer = Convert.ToInt32(txtPage.Text)

   PageCount = CInt(ViewState("PageCount"))

   If InputValue 〈= PageCount And InputValue 〉 0 Then

   CurrentPage = Convert.ToInt32(txtPage.Text) - 1

   Else

   CurrentPage = CInt(ViewState("PageIndex"))

   End If

   ViewState("PageIndex") = CurrentPage

   Catch

   End Try

   BindControl()

   End Sub




   Private Sub NumPerPage_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumPerPage.SelectedIndexChanged

   Try

   ViewState("PageSize") = NumPerPage.SelectedItem.Value


   CurrentPage = 0

   ViewState("PageIndex") = 0


   '计算总共有多少记录

   RecordCount = CalculateRecord()

   lblRecordCount.Text = RecordCount.ToString()


   '计算总共有多少页

   PageCount = RecordCount / Convert.ToInt32(ViewState("PageSize").ToString()) + (IIf(RecordCount Mod Convert.ToInt32(ViewState("PageSize").ToString()) = 0, 0, 1)) 'ToDo: Unsupported feature: conditional (?) operator.

   lblPageCount.Text = PageCount.ToString()

   ViewState("PageCount") = PageCount


   BindControl()

   Catch

   End Try

   End Sub


   Private Sub lblPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblPrevious.Click

   CurrentPage = CInt(ViewState("PageIndex"))

   PageCount = CInt(ViewState("PageCount"))




   If CurrentPage 〉 0 Then

   CurrentPage -= 1

   End If


   ViewState("PageIndex") = CurrentPage


   BindControl()

   End Sub


   Private Sub lblNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblNext.Click

   CurrentPage = CInt(ViewState("PageIndex"))

   PageCount = CInt(ViewState("PageCount"))




   If CurrentPage 〈 PageCount - 1 Then

   CurrentPage += 1

   End If


   ViewState("PageIndex") = CurrentPage


   BindControl()

   End Sub
End Class

调用
自己看着办
几点说明:
这个是测试版本

掉用如下

   ListControl1.GetRelatedControl = rptContent

   ListControl1.ToRefresh = True

   ListControl1.GetRelatedSqlStr = New bizlogic.DBFilm().selectFilmStr(ddl_Type.SelectedItem.Value, tbx_keyWord.Text)

标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP