Implement Paging in ASP.Net ListView control without using DataPager in C# and VB.Net

Last Reply 26 days ago By pandeyism

Posted one month ago

hello,

i had sucessfully build the auto page number on the report for about 300 pages.

when a record had more than one full page, then the data need to jump to the next page, but then the number can't add the next number.

for example:  the main page number "3", then the second continue page should be number "4", but NO, it's blank. 

no number.  the number "4" will be the new record on the new page. 

can you tell me what i need to provide to you to see.  i build the auto page number in the Stored Procedure. 

i don't want to use the datapager.

thanks. 

<asp:ListView ID="ListView2" runat="server" DataSourceID="SqlDataSource1">
    <AlternatingItemTemplate>
        <tr style="background-color: #FFF8DC;">
            <td>
                <asp:Label ID="OrgCodeLabel" runat="server" Text='<%# Eval("OrgCode") %>' Font-Size="Small" />
            </td>
            <td>
                <asp:Label ID="OPTitleLabel" runat="server" Text='<%# Eval("OPTitle") %>' Font-Size="Small" />
            </td>
            <td>
                <asp:Label ID="Label2" runat="server" Text='<%# Eval("Number")%>' Font-Size="Small" />
            </td>
        </tr>
    </AlternatingItemTemplate>
    <ItemTemplate>
        <tr style="background-color: #DCDCDC; color: #000000;">
            <td>
                <asp:Label ID="OrgCodeLabel" runat="server" Text='<%# Eval("OrgCode") %>' Font-Size="Small" />
            </td>
            <td>
                <asp:Label ID="OPTitleLabel" runat="server" Text='<%# Eval("OPTitle") %>' Font-Size="Small" />
            </td>
            <td>
                <asp:Label ID="Label1" runat="server" Text='<%# Eval("number")%>' Font-Size="Small" />
            </td>
        </tr>
    </ItemTemplate>
    <LayoutTemplate>
        <table id="Table1" runat="server">
            <tr id="Tr1" runat="server">
                <td id="Td1" runat="server">
                    <table id="itemPlaceholderContainer" runat="server" border="1" style="background-color: #FFFFFF;
                        border-collapse: collapse; border-color: #999999; border-style: none; border-width: 1px;
                        font-family: Verdana, Arial, Helvetica, sans-serif; font-size: small">
                        <tr id="Tr2" runat="server" style="background-color: #DCDCDC; color: #000000;">
                            <th id="Th1" runat="server">
                                Agency
                            </th>
                            <th id="Th2" runat="server">
                                Program
                            </th>
                            <th id="Th3" runat="server">
                                Page Number
                            </th>
                        </tr>
                        <tr id="itemPlaceholder" runat="server">
                        </tr>
                    </table>
                </td>
            </tr>
            <tr id="Tr3" runat="server">
                <td id="Td2" runat="server" style="text-align: center; background-color: #CCCCCC;
                    font-family: Verdana, Arial, Helvetica, sans-serif; color: #000000;">
                </td>
            </tr>
        </table>
        <p style="page-break-before: always;">
            &nbsp;</p>
    </LayoutTemplate>
</asp:ListView>

 

Posted 26 days ago Modified on 25 days ago

Hi phonghue,

Refer below code.

Database

For this sample I have used of NorthWind database that you can download using the link given below.

Download Northwind Database

SQL

CREATE PROCEDURE GetCustomersPageWise
      @PageIndex INT = 1
      ,@PageSize INT = 10
      ,@RecordCount INT OUTPUT
AS
BEGIN
      SET NOCOUNT ON;
      SELECT ROW_NUMBER() OVER
      (
            ORDER BY [CustomerID] ASC
      )AS RowNumber
      ,[CustomerID]
      ,[CompanyName]
      ,[ContactName]
     INTO #Results
      FROM [Customers]
      
      SELECT @RecordCount = COUNT(*)
      FROM #Results
            
      SELECT * FROM #Results
      WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1
      
      DROP TABLE #Results
END
GO

HTML

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        body
        {
            font-family: Arial;
            font-size: 10pt;
        }
        .Repeater, .Repeater td, .Repeater td
        {
            border: 1px solid #ccc;
        }
        .Repeater td
        {
            background-color: #eee !important;
        }
        .Repeater th
        {
            background-color: #6C6C6C !important;
            color: White;
            font-size: 10pt;
            line-height: 200%;
        }
        .Repeater span
        {
            color: black;
            font-size: 10pt;
            line-height: 200%;
        }
        .page_enabled, .page_disabled
        {
            display: inline-block;
            height: 20px;
            min-width: 20px;
            line-height: 20px;
            text-align: center;
            text-decoration: none;
            border: 1px solid #ccc;
        }
        .page_enabled
        {
            background-color: #eee;
            color: #000;
        }
        .page_disabled
        {
            background-color: #6C6C6C;
            color: #fff !important;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ListView ID="ListView1" runat="server">
            <ItemTemplate>
                <table>
                    <tr>
                        <td>
                            <p class="padding13">
                                <asp:Label ID="Label1" runat="server" Text='<%# Eval("CustomerId")%>' Font-Size="Small" /></p>
                        </td>
                    </tr>
                </table>
                <asp:Label ID="AutoNumLabel" runat="server" Text='<%# Eval("CompanyName") %>' Visible="false" />
                <br />
                <table>
                    <tr>
                        <td>
                            <p class="padding1">
                                <b>
                                    <asp:Label ID="OrgCodeLabel" runat="server" Text='<%# Eval("ContactName") %>' Font-Size="28px"
                                        Font-Names="Arial"></asp:Label></b></p>
                        </td>
                    </tr>
                </table>
                <hr style="border: thin solid #000000; background-color: #000000; margin-left: 10px;
                    margin-top: -5px; width: 650px" />
                <table>
                    <tr>
                        <td>
                            <p class="padding2">
                                <asp:Label ID="Label6" runat="server" Text="Program Title:" Font-Size="12px" Width="90px"></asp:Label></p>
                        </td>
                        <td>
                            <p class="padding3">
                                <b>
                                    <asp:Label ID="OPTitleLabel" Text='<%# Eval("ContactName") %>' runat="server" Font-Size="18px"
                                        Width="550px" Font-Names="Arial"></asp:Label></b></p>
                        </td>
                    </tr>
                </table>
            </ItemTemplate>
        </asp:ListView>
        <br />
        <asp:ListView ID="ListView2" runat="server">
            <ItemTemplate>
                <asp:LinkButton ID="lnkPage" runat="server" Text='<%#Eval("Text") %>' CommandArgument='<%# Eval("Value") %>'
                    CssClass='<%# Convert.ToBoolean(Eval("Enabled")) ? "page_enabled" : "page_disabled" %>'
                    OnClick="Page_Changed" OnClientClick='<%# !Convert.ToBoolean(Eval("Enabled")) ? "return false;" : "" %>'></asp:LinkButton>
            </ItemTemplate>
        </asp:ListView>
    </div>
    </form>
</body>
</html>

Namespaces

C#

using System.Data;
using System.Configuration;
using System.Data.SqlClient;

VB.Net

Imports System.Data
Imports System.Configuration
Imports System.Data.SqlClient

Code

C#

private int PageSize = 2;
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        this.GetCustomersPageWise(1);
    }
}

private void GetCustomersPageWise(int pageIndex)
{
    string constring = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constring))
    {
        using (SqlCommand cmd = new SqlCommand("GetCustomersPageWise", con))
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@PageIndex", pageIndex);
            cmd.Parameters.AddWithValue("@PageSize", PageSize);
            cmd.Parameters.Add("@RecordCount", SqlDbType.Int, 4);
            cmd.Parameters["@RecordCount"].Direction = ParameterDirection.Output;
            con.Open();
            IDataReader idr = cmd.ExecuteReader();
            ListView1.DataSource = idr;
            ListView1.DataBind();
            idr.Close();
            con.Close();
            int recordCount = Convert.ToInt32(cmd.Parameters["@RecordCount"].Value);
            this.PopulatePager(recordCount, pageIndex);
        }
    }
}

private void PopulatePager(int recordCount, int currentPage)
{
    double dblPageCount = (double)((decimal)recordCount / (decimal)PageSize);
    int pageCount = (int)Math.Ceiling(dblPageCount);
    List<ListItem> pages = new List<ListItem>();
    if (pageCount > 0)
    {
        pages.Add(new ListItem("<<", "1", currentPage > 1));
        if (currentPage != 1)
        {
            pages.Add(new ListItem("Previous", (currentPage - 1).ToString()));
        }
        if (pageCount < 4)
        {
            for (int i = 1; i <= pageCount; i++)
            {
                pages.Add(new ListItem(i.ToString(), i.ToString(), i != currentPage));
            }
        }
        else if (currentPage < 4)
        {
            for (int i = 1; i <= 4; i++)
            {
                pages.Add(new ListItem(i.ToString(), i.ToString(), i != currentPage));
            }
            pages.Add(new ListItem("...", (currentPage).ToString(), false));
        }
        else if (currentPage > pageCount - 4)
        {
            pages.Add(new ListItem("...", (currentPage).ToString(), false));
            for (int i = currentPage - 1; i <= pageCount; i++)
            {
                pages.Add(new ListItem(i.ToString(), i.ToString(), i != currentPage));
            }
        }
        else
        {
            pages.Add(new ListItem("...", (currentPage).ToString(), false));
            for (int i = currentPage - 2; i <= currentPage + 2; i++)
            {
                pages.Add(new ListItem(i.ToString(), i.ToString(), i != currentPage));
            }
            pages.Add(new ListItem("...", (currentPage).ToString(), false));
        }
        if (currentPage != pageCount)
        {
            pages.Add(new ListItem("next", (currentPage + 1).ToString()));
        }
        pages.Add(new ListItem(">>", pageCount.ToString(), currentPage < pageCount));
    }
    ListView2.DataSource = pages;
    ListView2.DataBind();
}

protected void Page_Changed(object sender, EventArgs e)
{
    int pageIndex = int.Parse((sender as LinkButton).CommandArgument);
    this.GetCustomersPageWise(pageIndex);
}

 VB.Net

Private PageSize As Integer = 2
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)Handle Me.Load
        If Not IsPostBack Then
            Me.GetCustomersPageWise(1)
        End If
    End Sub

    Private Sub GetCustomersPageWise(ByVal pageIndex As Integer)
        Dim constring As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
        Using con As SqlConnection = New SqlConnection(constring)
            Using cmd As SqlCommand = New SqlCommand("GetCustomersPageWise", con)
                cmd.CommandType = CommandType.StoredProcedure
                cmd.Parameters.AddWithValue("@PageIndex", pageIndex)
                cmd.Parameters.AddWithValue("@PageSize", PageSize)
                cmd.Parameters.Add("@RecordCount", SqlDbType.Int, 4)
                cmd.Parameters("@RecordCount").Direction = ParameterDirection.Output
                con.Open()
                Dim idr As IDataReader = cmd.ExecuteReader()
                ListView1.DataSource = idr
                ListView1.DataBind()
                idr.Close()
                con.Close()
                Dim recordCount As Integer = Convert.ToInt32(cmd.Parameters("@RecordCount").Value)
                Me.PopulatePager(recordCount, pageIndex)
            End Using
        End Using
    End Sub

    Private Sub PopulatePager(ByVal recordCount As Integer, ByVal currentPage As Integer)
        Dim dblPageCount As Double = CDbl((CDec(recordCount) / CDec(PageSize)))
        Dim pageCount As Integer = CInt(Math.Ceiling(dblPageCount))
        Dim pages As List(Of ListItem) = New List(Of ListItem)()
        If pageCount > 0 Then
            pages.Add(New ListItem("<<", "1", currentPage > 1))
            If currentPage <> 1 Then
                pages.Add(New ListItem("Previous", (currentPage - 1).ToString()))
            End If
            If pageCount < 4 Then
                For i As Integer = 1 To pageCount
                    pages.Add(New ListItem(i.ToString(), i.ToString(), i <> currentPage))
                Next
            ElseIf currentPage < 4 Then
                For i As Integer = 1 To 4
                    pages.Add(New ListItem(i.ToString(), i.ToString(), i <> currentPage))
                Next
                pages.Add(New ListItem("...", (currentPage).ToString(), False))
            ElseIf currentPage > pageCount - 4 Then
                pages.Add(New ListItem("...", (currentPage).ToString(), False))
                For i As Integer = currentPage - 1 To pageCount
                    pages.Add(New ListItem(i.ToString(), i.ToString(), i <> currentPage))
                Next
            Else
                pages.Add(New ListItem("...", (currentPage).ToString(), False))
                For i As Integer = currentPage - 2 To currentPage + 2
                    pages.Add(New ListItem(i.ToString(), i.ToString(), i <> currentPage))
                Next

                pages.Add(New ListItem("...", (currentPage).ToString(), False))
            End If
            If currentPage <> pageCount Then
                pages.Add(New ListItem("next", (currentPage + 1).ToString()))
            End If
            pages.Add(New ListItem(">>", pageCount.ToString(), currentPage < pageCount))
        End If
        ListView2.DataSource = pages
        ListView2.DataBind()
    End Sub

    Protected Sub Page_Changed(ByVal sender As Object, ByVal e As EventArgs)
        Dim pageIndex As Integer = Integer.Parse((TryCast(sender, LinkButton)).CommandArgument)
        Me.GetCustomersPageWise(pageIndex)
    End Sub

Screenshot