Hi  Rezu2215,
Refer below sample.
HTML
<asp:GridView ID="gvCustomers" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="CustomerId" HeaderText="CustomerId" />
        <asp:BoundField DataField="Name" HeaderText="Name" />
        <asp:BoundField DataField="Country" HeaderText="Country" />
    </Columns>
</asp:GridView>
<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" Font-Bold="true" />
    </ItemTemplate>
</asp:Repeater>
Code
C#
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindGrid(1);
    }
}
private List<Customer> GetData()
{
    TestEntities test = new TestEntities();
    var customer = from c in test.Customers select c;
    return customer.ToList();
}
private void BindGrid(int pageIndex)
{
    int totalRecords = GetData().Count;
    int pageSize = 2;
    int startRow = (pageIndex - 1) * pageSize;
    gvCustomers.DataSource = GetData().Skip(startRow).Take(pageSize);
    gvCustomers.DataBind();
    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);
}
VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        BindGrid(1)
    End If
End Sub
Private Function GetData() As List(Of Customer)
    Dim test As TestEntities = New TestEntities()
    Dim customer = From c In test.Customers Select c
    Return customer.ToList()
End Function
Private Sub BindGrid(ByVal pageIndex As Integer)
    Dim totalRecords As Integer = GetData().Count
    Dim pageSize As Integer = 2
    Dim startRow As Integer = (pageIndex - 1) * pageSize
    gvCustomers.DataSource = GetData().Skip(startRow).Take(pageSize)
    gvCustomers.DataBind()
    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)
End Sub
Screenshot
