html table add pagination

jewel 821 Reputation points
2024-07-04T16:30:13.3133333+00:00
I want to add page number to my table. But the problem is - when the page is loaded the page number is not working. Working when clicking on page number symbol. 
If I use the data manually instead of fetching it from the database, it works.
I would appreciate it if someone could help. thanks in advance

//style.css Code
.table-responsive {
    width: 100vw;
    margin-top: 3rem;
    height: 100vh;
}
    .table-responsive table {
        width: 100%;
        border-collapse: collapse;
        font-family: Georgia, 'Times New Roman', Times, serif;
        padding: 0.5vw;
    }
#myInput {
    padding: .5vw;
    border-radius: .4vw;
    margin-bottom: 1.5vw;
}
.table-responsive table th {
    padding: 0.5vw;
    border-bottom: 1px solid #ddd;
    outline-color: #dddddd7a;
    padding-left: 1vw;
    padding-right: 1vw;
    text-align: center;
    background-color: #3A3335;
    color: white;
    cursor: pointer;
    position: sticky;
    top: 0;
    font-size: 10px;
}
.table-responsive table td {
    padding-left: 0.5vw;
    padding-right: 0.5vw;
    border: 1px solid black;
    text-align: left;
    font-size: 10px;
}
/*table-responsive table th:first-child {
            border-top-left-radius: 10px;
        }
        .table-responsive table th:last-child {
            border-top-right-radius: 10px;
        }*/
.table-responsive table tr:nth-child(even) {
    background-color: #DBD4D3;
}
.table-responsive table tr:nth-child(odd) {
    background-color: whitesmoke;
}
.table-responsive table img {
    width: 60px;
    height: 60px;
    border-radius: 50%;
}
#pagination {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    align-items: center;
    padding: 10px;
    background-color: whitesmoke;
    font-weight: bold;
    font-family: sans-serif;
    font-size: 14px;
}
    #pagination a {
        color: black;
        float: left;
        padding: 9px 9px;
        margin: 3px;
        text-decoration: none;
        cursor: pointer;
    }
        #pagination a.active {
            border-radius: 50%;
            background-color: #4c4a4a;
            color: whitesmoke;
        }
#pageNumbersContainer {
    display: flex;
    flex-wrap: wrap;
}
#pageNumbers {
    display: flex;
    padding: 2px;
}
.table-responsive table input[type=number] {
    width: 40px;
    height: 25px;
    border: 1px solid lightgray;
    text-align: center;
    margin: 5px;
    border-radius: 5px;
    outline: none;
}
.table-responsive table input::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}
#goToPage {
    display: flex;
    align-items: center;
    margin-left: 10px;
    margin-right: 10px;
}
    #goToPage button {
        height: 35px;
        padding: 10px;
        align-items: center;
        font-weight: bold;
        border: none;
        border-radius: 4px;
        background-color: #4c4a4a;
        color: whitesmoke;
        cursor: pointer;
    }
#entriesDisplayDiv {
    display: flex;
    padding-left: 25px;
}
    #entriesDisplayDiv span {
        margin-left: 5px;
        margin-right: 5px;
    }

//main.js
let currentPage = 1;
let rowsPerPage = 10;
let totalPages;
const pageNumbers = document.getElementById("pageNumbers");
function paginateTable() {
    let table = document.getElementById("myTable");
    let rows = Array.from(table.rows).slice(1);
    totalPages = Math.ceil(rows.length / rowsPerPage);
    rows.forEach(row => row.style.display = "none");
    let start = (currentPage - 1) * rowsPerPage;
    let end = start + rowsPerPage;
    rows.slice(start, end).forEach(row => row.style.display = "");
    pageNumbers.innerHTML = "";
    createPageLink("<<", 1);
    createPageLink("<", currentPage - 1);
    let startPageNumber = currentPage < 5 ? 1 : (currentPage > totalPages - 2 ? totalPages - 4 : currentPage - 2);
    let endPageNumber = totalPages < 5 ? totalPages : (currentPage <= totalPages - 2 ? startPageNumber + 4 : totalPages);
    for (let i = startPageNumber; i <= endPageNumber; i++) {
        createPageLink(i, i);
    }
    createPageLink(">", currentPage + 1);
    createPageLink(">>", totalPages);
    setActivePageNumber();
    from.innerHTML = (currentPage - 1) * rowsPerPage + 1;
    to.innerHTML = currentPage === totalPages ? rows.length : (currentPage) * rowsPerPage;
    totalTableEntries.innerHTML = rows.length;
}
paginateTable();
function changePage(e, pageNumber) {
    if ((pageNumber == 0) || (pageNumber == totalPages + 1)) return;
    e.preventDefault();
    currentPage = pageNumber;
    pageNumberInput.value = "";
    paginateTable();
}
function setActivePageNumber() {
    document.querySelectorAll("#pageNumbers a").forEach(a => {
        if (a.innerText == currentPage) {
            a.classList.add("active");
        }
    });
}
function createPageLink(linkText, pageNumber) {
    let pageLink = document.createElement("a");
    pageLink.href = "#";
    pageLink.innerHTML = linkText;
    pageLink.addEventListener("click", function (e) {
        changePage(e, pageNumber);
    });
    pageNumbers.appendChild(pageLink);
}
goToPageButton.addEventListener("click", (e) => {
    changePage(e, pageNumberInput.value);
});

//index.cshtml


<div class="table-responsive">
        <input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search..." title="Type in a name">
   
    <table id="myTable">
  <thead>
            <tr class="header">
        <th class="order">
                        Contact No
                    </th>
        <th class="order">
                        Name
                    </th>
        <th class="order">
                        Email Address
                    </th>
                </tr>
  </thead>
  <tbody>
  </tbody>
          
        </table>
    </div>
<div id="pagination">
    <div id="entriesDisplayDiv">
        Showing <span id="from"> </span> to <span id="to"></span> out of <span id="totalTableEntries"></span> entries
    </div>
    <div id="pageNumbersContainer">
        <div id="pageNumbers"></div>
        <div id="goToPage">Go to Page <input id="pageNumberInput" type="number"><button id="goToPageButton">Confirm</button></div>
    </div>
</div>

    @section Scripts {
        @{
            await Html.RenderPartialAsync("_ValidationScriptsPartial");
        }
        <script type="text/javascript">
            $(document).ready(function () {
              
                loadData();
            });
            $("#productForm").submit(function (e) {
                e.preventDefault();
                var products = [];
            $("#myTable tbody tr").each(function () {
                    var product = {
                        Contuntno: $(this).find("td:eq(0)").text(),
                        Name: $(this).find("td:eq(1)").text(),
                        EmailAddress: $(this).find("td:eq(2)").text()
                    };
                    products.push(product);
                });
            });
            function loadData() {
                debugger
                $.ajax({
                    url: "/User/alluserList",
                    type: 'Get',
                    datatype: 'json',
                    success: function (data) {
                    // $('#myTable tbody').empty();
                        $.each(data, function (i, item) {
                            var rows = "<tr>"+
                            "<td date-lable='Contuct No'>" + item.username + "</td>"
                            + "<td date-lable='Name'>" + item.name + "</td>"
                            + "<td date-lable='Email'>" + item.emailAddress + "</td>"
                                + "</tr>";
                            $('#myTable tbody').append(rows);
                        });
                    }
                });
            }
        </script>
    }

record

ASP.NET Core
ASP.NET Core
A set of technologies in the .NET Framework for building web applications and XML web services.
4,346 questions
0 comments No comments
{count} votes

1 additional answer

Sort by: Most helpful
  1. Bruce (SqlWork.com) 60,386 Reputation points
    2024-07-04T17:21:38.0233333+00:00

    You don’t call paginateTable() after your async data load.

    2 people found this answer helpful.
    0 comments No comments