Here is a step-by-step guide on how to implement custom pagination in an ASP.NET Web Form. The code provided includes a stored procedure, GridView, and code-behind functionality for paging.
1. Stored Procedure (SQL)
This is the stored procedure that fetches paginated data based on search parameters.
USE [SCBABP_NEW]
GO
ALTER PROCEDURE SP_GetPagedMCCTInwardData
@SearchTerm NVARCHAR(100) = NULL,
@Offset INT,
@PageSize INT
AS
BEGIN
SET NOCOUNT ON;
SELECT [Id],
[SettlementDate],
[BankName],
[CustomerName],
[NidNumber],
[AccountNumber],
[CardNumber],
[CardType],
[TransactionType],
[MerchantCategoryCode],
[IssuingCountryCode],
[IssuingCountry],
[AmountBDT],
[PassportNumber],
[BirthRegistrationNumber],
[CreatedDateTime],
[CreatedBy],
[LastModifiedDateTime],
[LastModifiedBy]
FROM [SCBABP_NEW].[dbo].[t_MCCTInward]
WHERE (@SearchTerm IS NULL OR CustomerName LIKE '%' + @SearchTerm + '%')
ORDER BY [Id]
OFFSET @Offset ROWS FETCH NEXT @PageSize ROWS ONLY;
END;
2. Web Form (ASPX)
This ASPX page contains the search box, GridView, and pagination buttons. Make sure to properly link this page with the code-behind (TempDesign.aspx.cs
).
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TempDesign.aspx.cs" Inherits="YourNamespace.TempDesign" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Paginated Grid</title>
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<!-- Search Box -->
<asp:TextBox ID="txtSearch" runat="server" placeholder="Search by Customer Name..." CssClass="search-box" />
<asp:Button ID="btnSearch" runat="server" Text="Search" CssClass="search-button" OnClick="btnSearch_Click" />
<br /><br />
<!-- GridView for displaying data -->
<asp:GridView ID="gvData" runat="server" AutoGenerateColumns="False" AllowPaging="False" CssClass="data-table">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Id" />
<asp:BoundField DataField="SettlementDate" HeaderText="Settlement Date" />
<asp:BoundField DataField="BankName" HeaderText="Bank Name" />
<asp:BoundField DataField="CustomerName" HeaderText="Customer Name" />
<asp:BoundField DataField="NidNumber" HeaderText="NID Number" />
<asp:BoundField DataField="AccountNumber" HeaderText="Account Number" />
<asp:BoundField DataField="CardNumber" HeaderText="Card Number" />
<asp:BoundField DataField="CardType" HeaderText="Card Type" />
<asp:BoundField DataField="TransactionType" HeaderText="Transaction Type" />
<asp:BoundField DataField="MerchantCategoryCode" HeaderText="Merchant Category Code" />
<asp:BoundField DataField="IssuingCountryCode" HeaderText="Issuing Country Code" />
<asp:BoundField DataField="IssuingCountry" HeaderText="Issuing Country" />
<asp:BoundField DataField="AmountBDT" HeaderText="Amount (BDT)" />
<asp:BoundField DataField="PassportNumber" HeaderText="Passport Number" />
<asp:BoundField DataField="BirthRegistrationNumber" HeaderText="Birth Registration Number" />
</Columns>
</asp:GridView>
<br />
<!-- Pagination Buttons -->
<asp:Button ID="btnPrev" runat="server" Text="Previous" CssClass="pagination-button" OnClick="btnPrev_Click" />
<asp:Label ID="lblPageNumber" runat="server" Text="Page 1" CssClass="page-number-label"></asp:Label>
<asp:Button ID="btnNext" runat="server" Text="Next" CssClass="pagination-button" OnClick="btnNext_Click" />
</body>
</html>
3. CSS (styles.css)
Here’s the complete CSS for the search box, GridView, pagination buttons, and styling.
/* Search Box */
.search-box {
padding: 10px;
width: 300px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 14px;
}
/* Search Button */
.search-button {
padding: 10px 15px;
background-color: #007bff;
border: none;
color: white;
font-size: 14px;
border-radius: 4px;
cursor: pointer;
}
.search-button:hover {
background-color: #0056b3;
}
/* GridView Table */
.data-table {
width: 100%;
border-collapse: collapse;
margin: 20px 0;
background-color: white;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}
.data-table th,
.data-table td {
padding: 10px;
text-align: left;
border: 1px solid #ddd;
}
.data-table th {
background-color: #007bff;
color: white;
font-weight: bold;
text-transform: uppercase;
font-size: 14px;
}
.data-table tr:nth-child(even) {
background-color: #f2f2f2;
}
.data-table tr:hover {
background-color: #e9ecef;
}
/* Pagination Buttons */
.pagination-button {
padding: 10px 15px;
margin: 0 5px;
background-color: #007bff;
border: none;
color: white;
font-size: 14px;
border-radius: 4px;
cursor: pointer;
}
.pagination-button:hover {
background-color: #0056b3;
}
.page-number-label {
font-size: 14px;
margin: 0 10px;
color: #555;
}
4. Code-Behind (TempDesign.aspx.cs)
Here is the complete code-behind file, which manages pagination and binds data to the GridView.
using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI;
public partial class TempDesign : System.Web.UI.Page
{
private int PageSize = 10;
private int CurrentPage
{
get { return ViewState["CurrentPage"] == null ? 1 : (int)ViewState["CurrentPage"]; }
set { ViewState["CurrentPage"] = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindData();
}
}
protected void btnSearch_Click(object sender, EventArgs e)
{
CurrentPage = 1; // Reset to first page when searching
BindData();
}
protected void btnPrev_Click(object sender, EventArgs e)
{
if (CurrentPage > 1)
{
CurrentPage--;
BindData();
}
}
protected void btnNext_Click(object sender, EventArgs e)
{
CurrentPage++;
BindData();
}
private void BindData()
{
string searchQuery = txtSearch.Text.Trim();
int offset = (CurrentPage - 1) * PageSize;
using (SqlConnection conn = new SqlConnection(ConfigurationReader.CONNECTION_STRING))
{
using (SqlCommand cmd = new SqlCommand("SP_GetPagedMCCTInwardData", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@SearchTerm", string.IsNullOrEmpty(searchQuery) ? DBNull.Value : (object)searchQuery);
cmd.Parameters.AddWithValue("@Offset", offset);
cmd.Parameters.AddWithValue("@PageSize", PageSize);
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
gvData.DataSource = dt;
gvData.DataBind();
lblPageNumber.Text = "Page " + CurrentPage;
}
}
}
}