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
