Ejemplo n.º 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PageNumberAndItemNumbers"/> struct.
        /// </summary>
        /// <param name="pageNumber">
        /// Initial value for the <see cref="PageNumber"/> field.
        /// </param>
        /// <param name="pageSize">
        /// The <see cref="PageNumberAndSize.Size"/>
        /// of each page in a "paged" collection.
        /// </param>
        /// <param name="totalItems">
        /// The total number of items in a "paged" collection.
        /// </param>
        /// <param name="isLastPage">
        /// Optional signal for setting the <see cref="LastItemNumber"/>
        /// value, whether to calculate if <paramref name="pageNumber"/>
        /// is the last page or to use this value.
        /// </param>
        internal PageNumberAndItemNumbers(
            int pageNumber, byte pageSize, int totalItems, bool?isLastPage = null)
        {
            Contract.Requires <ArgumentOutOfRangeException>(
                pageNumber >= PageNumberAndSize.FirstPageNumber,
                "An ordinal page number is not a zero-based index. The number must be at least one.");
            Contract.Requires <ArgumentOutOfRangeException>(
                totalItems >= 0, "The number of items in the list must not be negative!");

            if (pageSize >= PageNumberAndSize.MinimumPageSize && (totalItems > 0))
            {
                // A page of fixed size which has items.
                this.PageNumber      = pageNumber;
                this.LastItemNumber  = pageNumber * pageSize;
                this.FirstItemNumber = this.LastItemNumber - pageSize + 1;

                // Determine whether this is the last page,
                // either by a parameter value or by calculation.
                if ((isLastPage.HasValue && isLastPage.Value) ||
                    (PagingInfoCalculator.CalculateTotalPages(pageSize, totalItems) == this.PageNumber))
                {
                    // If is the last page, replace the
                    // calculated LastItemNumber with
                    // the totalItems value.
                    this.LastItemNumber = totalItems;
                }
            }
            else
            {
                // An unbounded or empty page.
                this.PageNumber      = PageNumberAndSize.FirstPageNumber;
                this.FirstItemNumber = totalItems > 0 ? 1 : 0;
                this.LastItemNumber  = totalItems;
            }
        }
Ejemplo n.º 2
0
            public void CalculatesCorrectTotalPages()
            {
                Assert.Throws <ArgumentOutOfRangeException>(
                    () => PagingInfoCalculator.CalculateTotalPages(10, 0));

                Assert.Throws <ArgumentOutOfRangeException>(
                    () => PagingInfoCalculator.CalculateTotalPages(0, 1138));

                Assert.AreEqual(1, PagingInfoCalculator.CalculateTotalPages(10, 1));
                Assert.AreEqual(1, PagingInfoCalculator.CalculateTotalPages(10, 10));
                Assert.AreEqual(2, PagingInfoCalculator.CalculateTotalPages(10, 11));
                Assert.AreEqual(2, PagingInfoCalculator.CalculateTotalPages(10, 20));
            }