Hi jordan,
I have created sample refering the below article. As per the procedure change that with your database column.
HTML
C#
<table>
    <tr>
        <td>
            <asp:GridView ID="gvCustomers" runat="server" AutoGenerateColumns="false">
                <Columns>
                    <asp:BoundField DataField="CustomerId" HeaderText="Customer Id" />
                    <asp:BoundField DataField="ContactName" HeaderText="Contact Name" />
                    <asp:BoundField DataField="CompanyName" HeaderText="Company Name" />
                </Columns>
            </asp:GridView>
        </td>
    </tr>
    <tr>
        <td align="center">
            Current Page: <b>
                <asp:Label ID="lblIndex" runat="server" ForeColor="Red" /></b>     
            <asp:Repeater ID="rptPager" runat="server">
                <ItemTemplate>
                    <asp:LinkButton ID="lnkPage" runat="server" Text='<%#Eval("Text") %>' CommandArgument='<%# Eval("Value") %>'
                        Font-Underline="false" OnClick="Page_Changed" OnClientClick='<%# !Convert.ToBoolean(Eval("Enabled")) ? "return false;" : "" %>'></asp:LinkButton>
                </ItemTemplate>
            </asp:Repeater>
        </td>
    </tr>
</table>
VB.Net
<table>
    <tr>
        <td>
            <asp:GridView ID="gvCustomers" runat="server" AutoGenerateColumns="false">
                <Columns>
                    <asp:BoundField DataField="CustomerId" HeaderText="Customer Id" />
                    <asp:BoundField DataField="ContactName" HeaderText="Contact Name" />
                    <asp:BoundField DataField="CompanyName" HeaderText="Company Name" />
                </Columns>
            </asp:GridView>
        </td>
    </tr>
    <tr>
        <td align="center">
            Current Page: <b>
                <asp:Label ID="lblIndex" runat="server" ForeColor="Red" /></b>     
            <asp:Repeater ID="rptPager" runat="server">
                <ItemTemplate>
                    <asp:LinkButton ID="lnkPage" runat="server" Text='<%#Eval("Text") %>' CommandArgument='<%# Eval("Value") %>'
                        Font-Underline="false" OnClick="Page_Changed" OnClientClick='<%# If(Not Convert.ToBoolean(Eval("Enabled")), "return false;", "") %>'></asp:LinkButton>
                </ItemTemplate>
            </asp:Repeater>
        </td>
    </tr>
</table>
Code
C#
private int PageSize = 10;
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        this.GetCustomersPageWise(1);
        lblIndex.Text = "1";
    }
}
private void GetCustomersPageWise(int pageIndex)
{
    string constring = ConfigurationManager.ConnectionStrings["constring"].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();
            gvCustomers.DataSource = idr;
            gvCustomers.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 / Convert.ToDecimal(PageSize));
    int pageCount = (int)Math.Ceiling(dblPageCount);
    List<ListItem> pages = new List<ListItem>();
    if (pageCount > 0)
    {
        if (currentPage == 1)
        {
            for (int i = 1; i <= 5; i++)
            {
                pages.Add(new ListItem(i.ToString(), i.ToString(), i != currentPage));
            }
            pages.Add(new ListItem("...", (currentPage).ToString(), false));
        }
        else if (currentPage >= pageCount - 4)
        {
            if (currentPage == pageCount)
            {
                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
            {
                for (int i = currentPage + 1; i <= pageCount; i++)
                {
                    pages.Add(new ListItem(i.ToString(), i.ToString(), i != currentPage));
                }
            }
        }
        else
        {
            for (int i = currentPage + 1; i <= currentPage + 4; i++)
            {
                pages.Add(new ListItem(i.ToString(), i.ToString(), i != currentPage));
            }
            pages.Add(new ListItem("...", (currentPage).ToString(), false));
        }
    }
    rptPager.DataSource = pages;
    rptPager.DataBind();
}
protected void Page_Changed(object sender, EventArgs e)
{
    int pageIndex = int.Parse((sender as LinkButton).CommandArgument);
    this.GetCustomersPageWise(pageIndex);
    lblIndex.Text = pageIndex.ToString();
}
VB.Net
Private PageSize As Integer = 10
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        Me.GetCustomersPageWise(1)
        lblIndex.Text = "1"
    End If
End Sub
Private Sub GetCustomersPageWise(pageIndex As Integer)
    Dim constring As String = ConfigurationManager.ConnectionStrings("constring").ConnectionString
    Using con As New SqlConnection(constring)
        Using cmd As 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()
            gvCustomers.DataSource = idr
            gvCustomers.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(recordCount As Integer, currentPage As Integer)
    Dim dblPageCount As Double = CDbl(CDec(recordCount) / Convert.ToDecimal(PageSize))
    Dim pageCount As Integer = CInt(Math.Ceiling(dblPageCount))
    Dim pages As New List(Of ListItem)()
    If pageCount > 0 Then
        If currentPage = 1 Then
            For i As Integer = 1 To 5
                pages.Add(New ListItem(i.ToString(), i.ToString(), i <> currentPage))
            Next
            pages.Add(New ListItem("...", (currentPage).ToString(), False))
        ElseIf currentPage >= pageCount - 4 Then
            If currentPage = pageCount 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))
            Else
                For i As Integer = currentPage + 1 To pageCount
                    pages.Add(New ListItem(i.ToString(), i.ToString(), i <> currentPage))
                Next
            End If
        Else
            For i As Integer = currentPage + 1 To currentPage + 4
                pages.Add(New ListItem(i.ToString(), i.ToString(), i <> currentPage))
            Next
            pages.Add(New ListItem("...", (currentPage).ToString(), False))
        End If
    End If
    rptPager.DataSource = pages
    rptPager.DataBind()
End Sub
Protected Sub Page_Changed(sender As Object, e As EventArgs)
    Dim pageIndex As Integer = Integer.Parse(TryCast(sender, LinkButton).CommandArgument)
    Me.GetCustomersPageWise(pageIndex)
    lblIndex.Text = pageIndex.ToString()
End Sub
Screenshot
