public static int GetRepaterPageNumber(GeneralDataProvider Provider, string FilterPosition, int PageSize, out DataRow Row)
    {
        int ret   = 0;
        int Count = Provider.PageCount;

        System.Data.DataTable Data = Provider.SelectItems(0, 0, out Count);
        if (Data.Rows.Count > 0)
        {
            System.Data.DataRow[] drs = Data.Select(FilterPosition.Replace("N'", "'"));
            if (drs.Length > 0)
            {
                ret = Data.Rows.IndexOf(drs[0]) / PageSize;
                Row = drs[0];
            }
            else
            {
                Row = null;
            }
        }
        else
        {
            Row = null;
        }
        return(ret);
    }
    public static System.Data.DataTable ControlPagesButtons(Panel Panel, int ButtonsCount, int PageSize, ref int CurrentPage, bool HasLastFirst, bool HasNextPreviews, GeneralDataProvider Provider)
    {
        int Count = Provider.PageCount;

        System.Data.DataTable Data = Provider.SelectItems(CurrentPage, PageSize, out Count);
        Count = (int)Math.Ceiling((decimal)Count / (decimal)PageSize);
        if (CurrentPage == -1)
        {
            CurrentPage = Count - 1;
        }
        else if (CurrentPage >= Count && Count > 0)
        {
            CurrentPage = Count - 1;
            Data        = Provider.SelectItems(CurrentPage, PageSize, out Count);
            Count       = (int)Math.Ceiling((decimal)Count / (decimal)PageSize);
        }

        if (Panel != null)
        {
            if (Count == 1)
            {
                Panel.Visible = false;
                return(Data);
            }
            else if (Count >= 2)
            {
                Panel.Visible = true;
            }

            int startNum      = 0;
            int startBtn      = 1;
            int BtnPosCounter = 1;
            if ((int)((ButtonsCount + 1) / 2) < CurrentPage + 1)
            {
                if ((ButtonsCount & 1) == 1)
                {
                    startNum = (CurrentPage) - ((ButtonsCount) / 2);
                }
                else
                {
                    startNum = (CurrentPage + 1) - ((ButtonsCount) / 2);
                }
            }
            if (startNum > 0 && startNum + ButtonsCount > Count)
            {
                startNum = Count - ButtonsCount;
            }

            if (ButtonsCount >= Count)
            {
                startNum = 0;
            }

            if (Count < ButtonsCount)
            {
                startBtn = ButtonsCount - Count + startBtn;
            }
            BtnPosCounter = startBtn;
            int VisCount = BtnPosCounter;

            if (HasLastFirst)
            {
                ((Button)Panel.FindControl("__" + Panel.ID + "__Button" + BtnPosCounter.ToString())).Text            = "<<";
                ((Button)Panel.FindControl("__" + Panel.ID + "__Button" + BtnPosCounter.ToString())).CommandArgument = "F";
                ((Button)Panel.FindControl("__" + Panel.ID + "__Button" + BtnPosCounter.ToString())).Visible         = true;
                BtnPosCounter++;
            }
            if (HasNextPreviews)
            {
                ((Button)Panel.FindControl("__" + Panel.ID + "__Button" + BtnPosCounter.ToString())).Text            = "<";
                ((Button)Panel.FindControl("__" + Panel.ID + "__Button" + BtnPosCounter.ToString())).CommandArgument = "P";
                ((Button)Panel.FindControl("__" + Panel.ID + "__Button" + BtnPosCounter.ToString())).Visible         = true;
                BtnPosCounter++;
            }

            if (Count >= ButtonsCount)
            {
                for (int i = 0; i < ButtonsCount; i++)
                {
                    ((Button)Panel.FindControl("__" + Panel.ID + "__Button" + BtnPosCounter.ToString())).Text            = (startNum + 1).ToString();
                    ((Button)Panel.FindControl("__" + Panel.ID + "__Button" + BtnPosCounter.ToString())).CommandArgument = startNum.ToString();
                    ((Button)Panel.FindControl("__" + Panel.ID + "__Button" + BtnPosCounter.ToString())).Visible         = true;
                    BtnPosCounter++;
                    startNum++;
                }
            }
            else
            {
                for (int i = 0; i < Count; i++)
                {
                    ((Button)Panel.FindControl("__" + Panel.ID + "__Button" + BtnPosCounter.ToString())).Text            = (startNum + 1).ToString();
                    ((Button)Panel.FindControl("__" + Panel.ID + "__Button" + BtnPosCounter.ToString())).CommandArgument = startNum.ToString();
                    ((Button)Panel.FindControl("__" + Panel.ID + "__Button" + BtnPosCounter.ToString())).Visible         = true;
                    BtnPosCounter++;
                    startNum++;
                }
            }

            if (HasNextPreviews)
            {
                ((Button)Panel.FindControl("__" + Panel.ID + "__Button" + BtnPosCounter.ToString())).Text            = ">";
                ((Button)Panel.FindControl("__" + Panel.ID + "__Button" + BtnPosCounter.ToString())).CommandArgument = "N";
                ((Button)Panel.FindControl("__" + Panel.ID + "__Button" + BtnPosCounter.ToString())).Visible         = true;
                BtnPosCounter++;
            }
            if (HasLastFirst)
            {
                ((Button)Panel.FindControl("__" + Panel.ID + "__Button" + BtnPosCounter.ToString())).Text            = ">>";
                ((Button)Panel.FindControl("__" + Panel.ID + "__Button" + BtnPosCounter.ToString())).CommandArgument = "L";
                ((Button)Panel.FindControl("__" + Panel.ID + "__Button" + BtnPosCounter.ToString())).Visible         = true;
            }

            for (int BtnN = VisCount - 1; BtnN >= 1; BtnN--)
            {
                ((Button)Panel.FindControl("__" + Panel.ID + "__Button" + BtnN.ToString())).Visible = false;
            }
        }
        return(Data);
    }