{"id":106,"date":"2016-03-19T11:15:55","date_gmt":"2016-03-19T10:15:55","guid":{"rendered":"https:\/\/solidt.eu\/blog\/?p=106"},"modified":"2022-02-18T13:01:25","modified_gmt":"2022-02-18T12:01:25","slug":"c-paginghelper-class","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/c-paginghelper-class\/","title":{"rendered":"C# PagingHelper class"},"content":{"rendered":"\n\n\n<div style=\"height: 250px; position:relative; margin-bottom: 50px;\" class=\"wp-block-simple-code-block-ace\"><pre class=\"wp-block-simple-code-block-ace\" style=\"position:absolute;top:0;right:0;bottom:0;left:0\" data-mode=\"csharp\" data-theme=\"monokai\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\" data-copy=\"false\">namespace Code\n{\n\tusing System;\n\tusing System.Collections;\n\tusing System.Collections.Generic;\n\tusing System.Linq;\n\tusing System.Text;\n\n    public class PagingInfo\n    {\n        private int _pageCount = 0;\n        private int _pageIndex = 0;\n        private int _pageSize = 0;\n\n        private int _pageGroupCount = 0;\n        private int _pageGroupIndex = 0;\n        private int _pageGroupSize = 0;\n        \n        private int _itemIndex = 0;\n        private int _itemIndexOnPage = 0;\n        private int _itemCount = 0;\n\n        private bool _isFirstPage = true;\n        private bool _isLastPage = true;\n\n        private bool _isFirstItem = true;\n        private bool _isLastItem = true;\n\n        private bool _isFirstItemOnPage = true;\n        private bool _isLastItemOnPage = true;\n\n        public PagingInfo(int pageSize, int pageGroupSize, int itemCount)\n        {\n            _pageSize = pageSize;\n            _pageGroupSize = pageGroupSize;\n            _itemCount = itemCount;\n            Recalculate();\n        }\n\n        public static IEnumerable&lt;keyvaluepair&lt;int, t=\"\">> EnumerateThroughPage(PagingInfo pagingInfo, IList list)\n        {\n            for (int i = pagingInfo.PageFirstItemIndex; i &lt;= pagingInfo.PageLastItemIndex; i += 1)\n            {\n                yield return new KeyValuePair&lt;int, t=\"\">(i, list[i]);\n            }\n        }\n\n        public IEnumerable&lt;keyvaluepair&lt;int, t=\"\">> EnumerateThroughPageList(IList list)\n        {\n            for (int i = this.PageFirstItemIndex; i &lt;= this.PageLastItemIndex; i += 1)\n            {\n                yield return new KeyValuePair&lt;int, t=\"\">(i, (T)list[i]);\n            }\n        }\n\n        public IEnumerable&lt;keyvaluepair&lt;int, t=\"\">> EnumerateThroughPage(IList list)\n        {\n            for (int i = this.PageFirstItemIndex; i &lt;= this.PageLastItemIndex; i += 1)\n            {\n                yield return new KeyValuePair&lt;int, t=\"\">(i, list[i]);\n            }\n        }\n\n        public IEnumerable EnumerateThroughPageItemIndex()\n        {\n            for (int i = this.PageFirstItemIndex; i &lt;= this.PageLastItemIndex; i += 1)\n            {\n                yield return i;\n            }\n        }\n\n        public void SetPageIndex(int pageIndex)\n        {\n            if (!IsPageIndexValid(pageIndex))\n            {\n                pageIndex = 0;\n            }            \n\n            \/\/ Set the itemIndex to the first item on that page\n            if (_pageCount &lt; 1) { _pageCount = 1; }\n\n            if (_pageSize == 0)\n            {\n                SetItemIndex(0);\n            }\n            else\n            {\n                SetItemIndex(pageIndex * _pageSize);\n            }\n        }\n\n        public void SetItemIndex(int itemIndex)\n        {\n            _itemIndex = itemIndex;\n            Recalculate();\n        }\n\n        public void SetItemCount(int itemCount)\n        {\n            _itemCount = itemCount;\n            Recalculate();\n        }\n\n        public void Recalculate()\n        {\n            \/\/ IN\n            \/\/ Validate\n            if (_itemCount &lt; 0) { _itemCount = 0; }\n            if (_itemIndex &lt; 0 || _itemIndex > ItemCount) { _itemIndex = 0; }\n            if (_pageSize &lt; 0) { _pageSize = 0; }\n            if (_pageGroupSize &lt; 0) { _pageGroupSize = 0; }\n            \n\n            \/\/ OUT\n            if (_pageSize == 0)\n            {\n                _pageCount = 1;    \n            }\n            else\n            {                \n                _pageCount = (_itemCount + _pageSize - 1) \/ _pageSize;\n            }\n\n            if (_pageSize == 0)\n            {\n                _pageIndex = 0;   \n            }\n            else\n            {\n                _pageIndex = (_itemIndex \/ _pageSize);\n            }\n\n            if (_pageGroupSize == 0)\n            {\n                _pageGroupCount = 1;\n            }\n            else\n            {\n                _pageGroupCount = (_pageCount + _pageGroupSize - 1) \/ _pageGroupSize;\n            }\n\n            if (_pageGroupSize == 0)\n            {\n                _pageGroupIndex = 0;\n            }\n            else\n            {\n                _pageGroupIndex = (_pageIndex \/ _pageGroupSize);   \n            }\n\n            if (_pageSize == 0)\n            {\n                _itemIndexOnPage = _itemIndex;\n            }\n            else\n            {\n                _itemIndexOnPage = (_itemIndex % _pageSize);\n            }\n\n            _isFirstPage = (_pageIndex == 0);\n            _isLastPage = (_pageIndex + 1 == _pageCount);\n            _isFirstItem = (_itemIndex == 0);\n            _isLastItem = (_itemIndex + 1 == _itemCount);\n            _isFirstItemOnPage = (_itemIndexOnPage == 0);\n            _isLastItemOnPage = (_itemIndexOnPage == _pageSize - 1) || _isLastItem;\n        }\n\n        public int GetFirstPageOfGroup(int pageGroupIndex)\n        {\n            return pageGroupIndex * _pageGroupSize;\n        }\n\n        public int GetLastPageOfGroup(int pageGroupIndex)\n        {\n            return ((pageGroupIndex+1) * _pageGroupSize) - 1;\n        }\n\n        public int PageNumber { get { return _pageIndex+1; } }\n\n        public int PageCount { get { return _pageCount; } }\n        public int PageIndex { get { return _pageIndex; } }\n        public int PageSize { get { return _pageSize; } }        \n\n        public int PageGroupCount { get { return _pageGroupCount; } }\n        public int PageGroupIndex { get { return _pageGroupIndex; } }\n        public int PageGroupSize { get { return _pageGroupSize; } }\n\n        public bool HasPrevPage { get { return (PageIndex > 0); } }\n        public bool HasNextPage { get { return (PageCount > PageIndex+1); } }\n\n        public bool HasPrevPageGroup { get { return (PageGroupIndex > 0); } }\n        public bool HasNextPageGroup { get { return (PageGroupCount > PageGroupIndex+1); } }\n\n        public bool IsFirstPage { get { return _isFirstPage; } }\n        public bool IsLastPage { get { return _isLastPage; } }\n\n        public int ItemIndex { get { return _itemIndex; } }\n        public int ItemIndexOnPage { get { return _itemIndexOnPage; } }\n        public int ItemCount { get { return _itemCount; } }\n\n        public bool IsFirstItem { get { return _isFirstItem; } }\n        public bool IsLastItem { get { return _isLastItem; } }\n\n        public bool IsFirstItemOnPage { get { return _isFirstItemOnPage; } }\n        public bool IsLastItemOnPage { get { return _isLastItemOnPage; } }\n\n        public int PageFirstItemIndex { get { return PageIndex * PageSize; } }\n        public int PageLastItemIndex { get { return Math.Min(ItemCount-1, ((PageIndex+1) * PageSize) - 1); } }\n\n        public int PrevPageIndex { get { if (HasPrevPage) { return  _pageIndex - 1; } else { return _pageIndex; } } }\n        public int NextPageIndex { get { if (HasNextPage) { return  _pageIndex + 1; } else { return _pageIndex; } } }\n        \n\n        public bool IsPageIndexValid(int pageIndex)\n        { \n            return (pageIndex >= 0 &amp;&amp; PageCount > pageIndex); \n        }\n    }    \n}\n<\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[6],"tags":[],"class_list":["post-106","post","type-post","status-publish","format-standard","hentry","category-dotnet"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/106","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=106"}],"version-history":[{"count":3,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/106\/revisions"}],"predecessor-version":[{"id":6028,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/106\/revisions\/6028"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=106"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=106"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=106"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}