Skip to content
Loading
How to add pagination like google ?   
  1. public partial class UsersControl : CompleetControl  
  2. {  
  3.     protected Features Features;  
  4.     private User _user;  
  5.     private Guid _sessionId;  
  6.   
  7.     public int PageSize = 5;  
  8.     private static int _pageCount;  
  9.     private static int _userAmount;  
  10.   
  11.     protected void Page_Load(object sender, EventArgs e)  
  12.     {  
  13.         _sessionId = Guid.Parse(HttpContext.Current.Session["BWSESSION"].ToString());  
  14.   
  15.         try  
  16.         {  
  17.             if (PortalApplication == null)  
  18.                 return;  
  19.   
  20.             Features = new Features(PortalApplication.User);  
  21.             if (!Features.ReadUsers)  
  22.             {  
  23.                 PortalApplication.ExecuteCommand(PortalApplication.GetAfterErrorCommand(404));  
  24.                 return;  
  25.             }  
  26.   
  27.             if (!IsPostBack)  
  28.                 FillRptUsers();  
  29.   
  30.             AddUserHyperLink.NavigateUrl = PortalApplication.GetUrl(PortalApplication.GetCommandByName(ApplicationCommands.UserAdd).Url);  
  31.         }  
  32.         catch (Exception ex)  
  33.         {  
  34.             PortalApplication.HandleException(ex);  
  35.             ShowFailureText();  
  36.         }  
  37.     }  
  38.   
  39.     public void FillRptUsers()  
  40.     {  
  41.         //trim filter  
  42.         char[] charsToTrim = { ' ''\t' };  
  43.         UserFilter.Text = UserFilter.Text.Trim(charsToTrim);  
  44.   
  45.         // set start index  
  46.         var startIndex = PageSize*CurrentPage;  
  47.   
  48.         // Get sortingmethod and SortingColumn  
  49.         var sorthingMethod = (string) ViewState["SortOrder"];  
  50.         var sorthingColumn = (string) ViewState["SortColumn"];  
  51.   
  52.         if (string.IsNullOrEmpty(sorthingMethod))  
  53.             sorthingMethod = "Asc";  
  54.   
  55.         if (string.IsNullOrEmpty(sorthingColumn))  
  56.             sorthingColumn = "Name";  
  57.   
  58.         var serviceProviderId = PortalApplication.User.serviceProviderId;  
  59.         var groupId = PortalApplication.User.groupId;  
  60.         var userResponse = PortalApplication.GetGroupUsers(  
  61.             serviceProviderId: serviceProviderId,   
  62.             groupId: groupId,   
  63.             filter: UserFilter.Text,   
  64.             curPage: CurrentPage,   
  65.             startIndex: startIndex,  
  66.             limit: PageSize,  
  67.             sortOrder: sorthingMethod,  
  68.             sortColumn: sorthingColumn  
  69.             );  
  70.   
  71.         var users = userResponse.Item1;  
  72.         _userAmount = userResponse.Item2;  
  73.   
  74.         //if ((string)ViewState["SortOrder"] == KeyConstants.AscSortOrder)  
  75.         //    switch ((string)ViewState["SortColumn"])  
  76.         //    {  
  77.         //        case KeyConstants.UserNameColumn:  
  78.         //            users = users.OrderBy(x => x.firstName).ThenBy(x => x.lastName).ToList();  
  79.         //            break;  
  80.         //        case KeyConstants.UserPhoneNumberColumn:  
  81.         //            users = users.OrderBy(x => x.phoneNumber).ToList();  
  82.         //            break;  
  83.         //        case KeyConstants.UserInternalNumberColumn:  
  84.         //            users = users.OrderBy(x => x.extension).ToList();  
  85.         //            break;  
  86.         //        case KeyConstants.UserLocationColumn:  
  87.         //            users = users.OrderBy(x => x.departmentFullPath).ToList();  
  88.         //            break;  
  89.         //        case KeyConstants.UserEmailColumn:  
  90.         //            users = users.OrderBy(x => x.emailAddress).ToList();  
  91.         //            break;  
  92.         //        case KeyConstants.UserQueueColumn:  
  93.         //            users = users.OrderBy(x => x.hasCallQueueService).ToList();  
  94.         //            break;  
  95.         //    }  
  96.         //else if ((string)ViewState["SortOrder"] == KeyConstants.DescSortOrder)  
  97.         //    switch ((string)ViewState["SortColumn"])  
  98.         //    {  
  99.         //        case KeyConstants.UserNameColumn:  
  100.         //            users = users.OrderByDescending(x => x.firstName).ThenByDescending(x => x.lastName).ToList();  
  101.         //            break;  
  102.         //        case KeyConstants.UserPhoneNumberColumn:  
  103.         //            users = users.OrderByDescending(x => x.phoneNumber).ToList();  
  104.         //            break;  
  105.         //        case KeyConstants.UserInternalNumberColumn:  
  106.         //            users = users.OrderByDescending(x => x.extension).ToList();  
  107.         //            break;  
  108.         //        case KeyConstants.UserLocationColumn:  
  109.         //            users = users.OrderByDescending(x => x.departmentFullPath).ToList();  
  110.         //            break;  
  111.         //        case KeyConstants.UserEmailColumn:  
  112.         //            users = users.OrderByDescending(x => x.emailAddress).ToList();  
  113.         //            break;  
  114.         //        case KeyConstants.UserQueueColumn:  
  115.         //            users = users.OrderByDescending(x => x.hasCallQueueService).ToList();  
  116.         //            break;  
  117.         //    }  
  118.         //else  
  119.         //    users = users.OrderBy(x => x.firstName).ThenBy(x => x.lastName).ToList();  
  120.   
  121.         // Consistant numbers:  
  122.         foreach (var user in users)  
  123.             user.phoneNumber = CompleetApplication.E164ToLocal(user.phoneNumber);  
  124.   
  125.         var dataSource = new PagedDataSource  
  126.         {  
  127.             DataSource = users,  
  128.             AllowPaging = true,  
  129.             PageSize = PageSize,  
  130.             VirtualCount = _userAmount  
  131.         };  
  132.   
  133.         rptUsers.DataSource = dataSource;  
  134.         rptUsers.DataBind();  
  135.   
  136.         _pageCount = _userAmount%PageSize == 0 ? _userAmount/PageSize : (_userAmount/PageSize) + 1;  
  137.         SetPageControl(dataSource);  
  138.     }  
  139.   
  140.     public void SetPageControl(PagedDataSource dataSource)  
  141.     {  
  142.         var currentPageLabel = (Label)rptUsers.Controls[rptUsers.Controls.Count - 1].Controls[0].FindControl("currentPageLabel");  
  143.         var nextPageButton = (Button)rptUsers.Controls[rptUsers.Controls.Count - 1].Controls[0].FindControl("nextButton");  
  144.         var prevPageButton = (Button)rptUsers.Controls[rptUsers.Controls.Count - 1].Controls[0].FindControl("prevButton");  
  145.         var prevThreePagesButton = (Button)rptUsers.Controls[rptUsers.Controls.Count - 1].Controls[0].FindControl("prevThreePagesButton");  
  146.         var nextThreePagesButton = (Button)rptUsers.Controls[rptUsers.Controls.Count - 1].Controls[0].FindControl("nextThreePagesButton");  
  147.         var firstPageButton = (Button)rptUsers.Controls[rptUsers.Controls.Count - 1].Controls[0].FindControl("firstPageButton");  
  148.         var lastPageButton = (Button)rptUsers.Controls[rptUsers.Controls.Count - 1].Controls[0].FindControl("lastPageButton");  
  149.         var currentPageOfTotalPagesLabel = (Label)rptUsers.Controls[rptUsers.Controls.Count - 1].Controls[0].FindControl("CurrentPageOfTotalPagesLabel");  
  150.   
  151.         nextPageButton.Visible = true;  
  152.         prevPageButton.Visible = true;  
  153.         prevThreePagesButton.Visible = true;  
  154.         nextThreePagesButton.Visible = true;  
  155.         firstPageButton.Visible = true;  
  156.         lastPageButton.Visible = true;  
  157.   
  158.         currentPageLabel.Text = (CurrentPage + 1).ToString();  
  159.   
  160.         // shows current page of total pages   
  161.         var itemsvalue = ((CurrentPage*10) + 10) > _userAmount ? _userAmount : (CurrentPage*10) + 10;  
  162.         currentPageOfTotalPagesLabel.Text = $"Items {(CurrentPage * 10) + 1} t/m {itemsvalue} van {_userAmount}";  
  163.   
  164.         if (dataSource.PageCount == 1)  
  165.         {  
  166.             prevPageButton.Visible = true;  
  167.             currentPageLabel.Visible = true;  
  168.             nextPageButton.Visible = true;  
  169.             prevThreePagesButton.Visible = true;  
  170.             nextThreePagesButton.Visible = true;  
  171.             firstPageButton.Visible = true;  
  172.             lastPageButton.Visible = true;  
  173.         }  
  174.   
  175.         if (CurrentPage + 1 >= _pageCount)  
  176.         {  
  177.             nextPageButton.Visible = false;  
  178.             nextThreePagesButton.Visible = false;  
  179.             lastPageButton.Visible = false;  
  180.         }  
  181.   
  182.         if (CurrentPage == 0)  
  183.         {  
  184.             prevPageButton.Enabled = false;  
  185.             prevPageButton.Text = " ";  
  186.             prevPageButton.Attributes.CssStyle.Add(HtmlTextWriterStyle.BackgroundColor, "transparent");  
  187.             prevPageButton.Attributes.CssStyle.Add(HtmlTextWriterStyle.BorderWidth, "0");  
  188.   
  189.             prevThreePagesButton.Enabled = false;  
  190.             prevThreePagesButton.Text = " ";  
  191.             prevThreePagesButton.Attributes.CssStyle.Add(HtmlTextWriterStyle.BackgroundColor, "transparent");  
  192.             prevThreePagesButton.Attributes.CssStyle.Add(HtmlTextWriterStyle.BorderWidth, "0");  
  193.   
  194.             firstPageButton.Enabled = false;  
  195.             firstPageButton.Text = " ";  
  196.             firstPageButton.Attributes.CssStyle.Add(HtmlTextWriterStyle.BackgroundColor, "transparent");  
  197.             firstPageButton.Attributes.CssStyle.Add(HtmlTextWriterStyle.BorderWidth, "0");  
  198.         }  
  199.   
  200.     }  
  201.   
  202.     public int CurrentPage  
  203.     {  
  204.         get  
  205.         {  
  206.             var o = ViewState["_CurrentPage"];  
  207.             if (o == null)  
  208.                 return 0;  
  209.             return (int)o;  
  210.         }  
  211.   
  212.         set  
  213.         {  
  214.             ViewState["_CurrentPage"] = value;  
  215.         }  
  216.     }  
  217.   
  218.     protected void prevButton_Click(object sender, EventArgs e)  
  219.     {  
  220.         CurrentPage -= 1;  
  221.         FillRptUsers();  
  222.     }  
  223.   
  224.     protected void prevThreePagesButton_Click(object sender, EventArgs e)  
  225.     {  
  226.         CurrentPage -= 3;  
  227.         FillRptUsers();  
  228.     }  
  229.   
  230.     protected void firstPageButton_Click(object sender, EventArgs e)  
  231.     {  
  232.         CurrentPage = 0;  
  233.         FillRptUsers();  
  234.     }  
  235.   
  236.     protected void nextButton_Click(object sender, EventArgs e)  
  237.     {  
  238.         CurrentPage += 1;  
  239.         FillRptUsers();  
  240.     }  
  241.   
  242.     protected void nextThreePagesButton_Click(object sender, EventArgs e)  
  243.     {  
  244.         CurrentPage += 3;  
  245.         FillRptUsers();  
  246.     }  
  247.     protected void lastPageButton_Click(object sender, EventArgs e)  
  248.     {  
  249.         CurrentPage = _pageCount -1;  
  250.         FillRptUsers();  
  251.     }  

1 Reply

Know the answer? Post it — somebody with the same question will find it here.