Hi Rezu2215,
Refer below sample.
HTML
<div>
<table>
<tr>
<td>
<b>Page Size:</b>
<asp:TextBox ID="txtSize" runat="server" Width="30px" OnTextChanged="TxtSize_TextChanged"
AutoPostBack="true"></asp:TextBox>
<b>Page No:</b>
<asp:TextBox ID="txtPageNo" runat="server" Width="30px" OnTextChanged="TxtPageNo_TextChanged"
AutoPostBack="true"></asp:TextBox>
</td>
</tr>
</table>
</div>
<asp:GridView ID="GridView1" runat="server" CssClass="Grid" PagerStyle-CssClass="pgr"
FooterStyle-CssClass="footer" ShowFooter="True" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
<asp:BoundField DataField="Country" HeaderText="Country" SortExpression="Country" />
<asp:BoundField DataField="CustomerId" HeaderText="CustomerId" SortExpression="CustomerId" />
<asp:TemplateField HeaderText="Country">
<ItemTemplate>
<asp:Label ID="lblCountry" runat="server" Text='<%# Bind("Country") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID="lblCountry" runat="server" Text='<%# Eval("Country") %>' Visible="false"></asp:Label>
<asp:DropDownList ID="ddlCountries" runat="server">
</asp:DropDownList>
</EditItemTemplate>
<FooterTemplate>
Number of records:
<%# GridView1.Rows.Count %></FooterTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle CssClass="footer"></FooterStyle>
<PagerStyle CssClass="pgr"></PagerStyle>
</asp:GridView>
<div class="linkBtn">
<asp:Repeater ID="rptPager" runat="server">
<ItemTemplate>
<asp:LinkButton ID="lnkPage" runat="server" Text='<%#Eval("Text") %>' CommandArgument='<%#Eval("Value") %>'
Enabled='<%#Eval("Enabled") %>' OnClick="Page_Changed" CssClass="links" />
</ItemTemplate>
</asp:Repeater>
</div>
Code
C#
TestEntities test = new TestEntities();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGrid(1, 2);
}
}
protected void TxtSize_TextChanged(object sender, EventArgs e)
{
if (txtSize.Text != "")
{
BindGrid(1, !string.IsNullOrEmpty(txtSize.Text) ? Convert.ToInt32(txtSize.Text) : 2);
}
}
protected void TxtPageNo_TextChanged(object sender, EventArgs e)
{
if (txtPageNo.Text != "")
{
BindGrid(Convert.ToInt32(txtPageNo.Text), !string.IsNullOrEmpty(txtSize.Text) ? Convert.ToInt32(txtSize.Text) : 2);
}
}
private List<Customer> GetData()
{
var customer = from c in test.Customers select c;
return customer.ToList();
}
private void BindGrid(int pageIndex, int pageSize)
{
int totalRecords = GetData().Count;
int startRow = (pageIndex - 1) * pageSize;
GridView1.DataSource = GetData().Skip(startRow).Take(pageSize);
GridView1.DataBind();
GridView1.FooterRow.Cells[0].Text = "Page " + pageIndex + " of " + totalRecords;
PopulatePager(totalRecords, pageIndex, pageSize);
}
private void PopulatePager(int recordCount, int currentPage, int PageSize)
{
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("First", "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("Last", pageCount.ToString(), currentPage < pageCount));
}
rptPager.DataSource = pages;
rptPager.DataBind();
}
protected void Page_Changed(object sender, EventArgs e)
{
int pageIndex = Convert.ToInt32(((sender as LinkButton).CommandArgument));
BindGrid(pageIndex, !string.IsNullOrEmpty(txtSize.Text) ? Convert.ToInt32(txtSize.Text) : 2);
}
VB.Net
Private test As TestEntities = New TestEntities()
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not IsPostBack Then
BindGrid(1, 2)
End If
End Sub
Protected Sub TxtSize_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
If txtSize.Text <> "" Then
BindGrid(1, If(Not String.IsNullOrEmpty(txtSize.Text), Convert.ToInt32(txtSize.Text), 2))
End If
End Sub
Protected Sub TxtPageNo_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
If txtPageNo.Text <> "" Then
BindGrid(Convert.ToInt32(txtPageNo.Text), If(Not String.IsNullOrEmpty(txtSize.Text), Convert.ToInt32(txtSize.Text), 2))
End If
End Sub
Private Function GetData() As List(Of Customer)
Dim customer = From c In test.Customers Select c
Return customer.ToList()
End Function
Private Sub BindGrid(ByVal pageIndex As Integer, ByVal pageSize As Integer)
Dim totalRecords As Integer = GetData().Count
Dim startRow As Integer = (pageIndex - 1) * pageSize
GridView1.DataSource = GetData().Skip(startRow).Take(pageSize)
GridView1.DataBind()
GridView1.FooterRow.Cells(0).Text = "Page " & pageIndex & " of " & totalRecords
PopulatePager(totalRecords, pageIndex, pageSize)
End Sub
Private Sub PopulatePager(ByVal recordCount As Integer, ByVal currentPage As Integer, ByVal PageSize 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("First", "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("Last", pageCount.ToString(), currentPage < pageCount))
End If
rptPager.DataSource = pages
rptPager.DataBind()
End Sub
Protected Sub Page_Changed(ByVal sender As Object, ByVal e As EventArgs)
Dim pageIndex As Integer = Convert.ToInt32(((TryCast(sender, LinkButton)).CommandArgument))
BindGrid(pageIndex, If(Not String.IsNullOrEmpty(txtSize.Text), Convert.ToInt32(txtSize.Text), 2))
End Sub
Screenshot
