Пример #1
0
        private void OnSortEvent(PersonSortCriteria criteria, SortDirection sortDirection)
        {
            this.sortCriteria  = criteria;
            this.sortDirection = sortDirection;

            LoadDataForCurrentPage();
        }
Пример #2
0
        public IActionResult List(int pageIndex = 0, int pageSize = 20, PersonSortCriteria criteria = PersonSortCriteria.ById, SortDirection sortDirection = SortDirection.Ascending)
        {
            var personBO = new PersonBusinessObject(this.personRepository);

            var data = personBO.GetPersonsPaged(criteria, sortDirection);

            return(View("Index", data));
        }
Пример #3
0
        public void Start()
        {
            this.menuView.OnViewEvent += MenuView_OnViewEvent;

            this.sortCriteria = PersonSortCriteria.ById;

            this.sortDirection = SortDirection.Ascending;

            this.OnGoToFirstPageEvent();
        }
Пример #4
0
        public SortedCollection <Person, PersonSortCriteria> GetPersonSorted(PersonSortCriteria sortCriteria, SortDirection sortDirection)
        {
            var sqlSort = new StringBuilder();

            ValueTypeMultiSwitch <PersonSortCriteria, SortDirection>
            .On(sortCriteria, sortDirection)
            .Case(PersonSortCriteria.ById, SortDirection.Ascending, () => sqlSort.Append("PersonID Asc"))
            .Case(PersonSortCriteria.ById, SortDirection.Descending, () => sqlSort.Append("PersonID Desc"))
            .Case(PersonSortCriteria.ByFirstName, SortDirection.Ascending, () => sqlSort.Append("FirstName Asc"))
            .Case(PersonSortCriteria.ByFirstName, SortDirection.Descending, () => sqlSort.Append("FirstName Desc"))
            .Case(PersonSortCriteria.ByLastName, SortDirection.Ascending, () => sqlSort.Append("LastName Asc"))
            .Case(PersonSortCriteria.ByLastName, SortDirection.Descending, () => sqlSort.Append("LastName Desc"))
            .Case(PersonSortCriteria.ByBirthDate, SortDirection.Ascending, () => sqlSort.Append("DateOfBirth Asc"))
            .Case(PersonSortCriteria.ByBirthDate, SortDirection.Descending, () => sqlSort.Append("DateOfBirth Desc"))
            .Default(() => sqlSort.Append("PersonID Asc"))
            .Evaluate();


            var sqlData = new StringBuilder();

            sqlData.Append(@"
				SELECT [PersonID]
				  ,[FirstName]
				  ,[LastName]
				  ,[DateOfBirth]
				FROM [dbo].[persons] order by "                 + sqlSort.ToString());

            List <Person> itemsPerPage = new List <Person>();

            using (var sqlConnection = new SqlConnection(this.connectionString))
            {
                sqlConnection.Open();

                using (var sqlCmd = new SqlCommand(sqlData.ToString(), sqlConnection))
                {
                    using (var reader = sqlCmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            itemsPerPage.Add(new Person
                            {
                                PersonID    = (int)reader["PersonID"],
                                FirstName   = reader["FirstName"]?.ToString(),
                                LastName    = reader["LastName"]?.ToString(),
                                DateOfBirth = (reader["DateOfBirth"] != DBNull.Value) ? (DateTime)reader["DateOfBirth"] : DateTime.MinValue
                            });
                        }
                    }
                }
                sqlConnection.Close();
            }
            return(new SortedCollection <Person, PersonSortCriteria>(itemsPerPage, sortCriteria, sortDirection));
        }
Пример #5
0
        public IActionResult List(int pageIndex = 0, int pageSize = 20, PersonSortCriteria criteria = PersonSortCriteria.ById, SortDirection sortDirection = SortDirection.Ascending)
        {
            var personBO = new PersonBusinessObject(this.personRepository, this.fileNameGenerator, this.fileManager);

            var data = personBO.GetPersonsPaged(pageIndex, pageSize, criteria, sortDirection);

            if (pageIndex > data.GetLastPageIndex())
            {
                pageIndex = data.GetLastPageIndex();

                data = personBO.GetPersonsPaged(pageIndex, pageSize, criteria, sortDirection);
            }

            return(View("Index", data));
        }
Пример #6
0
        public SortedPagedCollection <Person, PersonSortCriteria> GetPersonsPaged(int pageIndex, int pageSize, PersonSortCriteria sortCriteria, SortDirection sortDirection)
        {
            if (pageIndex < 0)
            {
                throw new ArgumentException($"{nameof(pageIndex)} must be a positive numeric value");
            }

            if (pageSize <= 0)
            {
                throw new ArgumentException($"{nameof(pageSize)} must be a strict-positive numeric value");
            }

            return(this.personsRepository.GetPersonsPaged(pageIndex, pageSize, sortCriteria, sortDirection));
        }
Пример #7
0
        SortedCollection <Person, PersonSortCriteria> GetPersonSorted(PersonSortCriteria sortCriteria, SortDirection sortDirection)
        {
            IEnumerable <Person> query = InMemoryPersonRepository.personsCollection;

            switch (sortCriteria)
            {
            case PersonSortCriteria.ById:
            default:
                switch (sortDirection)
                {
                case SortDirection.Ascending:
                default:
                    query = query.OrderBy(p => p.PersonID);
                    break;

                case SortDirection.Descending:
                    query = query.OrderByDescending(p => p.PersonID);
                    break;
                }
                break;

            case PersonSortCriteria.ByFirstName:
                switch (sortDirection)
                {
                case SortDirection.Ascending:
                default:
                    query = query.OrderBy(p => p.FirstName);
                    break;

                case SortDirection.Descending:
                    query = query.OrderByDescending(p => p.FirstName);
                    break;
                }
                break;

            case PersonSortCriteria.ByLastName:
                switch (sortDirection)
                {
                case SortDirection.Ascending:
                default:
                    query = query.OrderBy(p => p.LastName);
                    break;

                case SortDirection.Descending:
                    query = query.OrderByDescending(p => p.LastName);
                    break;
                }
                break;

            case PersonSortCriteria.ByBirthDate:
                switch (sortDirection)
                {
                case SortDirection.Ascending:
                default:
                    query = query.OrderBy(p => p.DateOfBirth);
                    break;

                case SortDirection.Descending:
                    query = query.OrderByDescending(p => p.DateOfBirth);
                    break;
                }
                break;
            }

            int totalRecordsCount = query.Count();

            var data = query;

            return(new SortedCollection <Person, PersonSortCriteria>(data, sortCriteria, sortDirection));
        }
Пример #8
0
 SortedCollection <Person, PersonSortCriteria> IPersonRepository.GetPersonSorted(PersonSortCriteria sortCriteria, SortDirection sortDirection)
 {
     throw new NotImplementedException();
 }
Пример #9
0
        public SortedCollection <Person, PersonSortCriteria> GetPersonSorted(PersonSortCriteria sortCriteria, SortDirection sortDirection)
        {
            IEnumerable <Person> query = from persElement in this.xmlDocument.Descendants("Person")
                                         let dateOfBirthString = persElement.Element("DateOfBirth")?.Value
                                                                 let dateOfBirthFormat = persElement.Element("DateOfBirth") != null?
                                                                                         persElement.Element("DateOfBirth").Attribute("format")?.Value
                                                                                         :
                                                                                         ""
                                                                                         select new Person()
            {
                PersonID    = int.Parse(persElement.Attribute("PersonID").Value),
                FirstName   = persElement.Element("FirstName")?.Value,
                LastName    = persElement.Element("LastName")?.Value,
                DateOfBirth = dateOfBirthString.ParseWithFormat(dateOfBirthFormat)
            };

            switch (sortCriteria)
            {
            case PersonSortCriteria.ById:
            default:
                switch (sortDirection)
                {
                case SortDirection.Ascending:
                default:
                    query = query.OrderBy(p => p.PersonID);
                    break;

                case SortDirection.Descending:
                    query = query.OrderByDescending(p => p.PersonID);
                    break;
                }
                break;

            case PersonSortCriteria.ByFirstName:
                switch (sortDirection)
                {
                case SortDirection.Ascending:
                default:
                    query = query.OrderBy(p => p.FirstName);
                    break;

                case SortDirection.Descending:
                    query = query.OrderByDescending(p => p.FirstName);
                    break;
                }
                break;

            case PersonSortCriteria.ByLastName:
                switch (sortDirection)
                {
                case SortDirection.Ascending:
                default:
                    query = query.OrderBy(p => p.LastName);
                    break;

                case SortDirection.Descending:
                    query = query.OrderByDescending(p => p.LastName);
                    break;
                }
                break;

            case PersonSortCriteria.ByBirthDate:
                switch (sortDirection)
                {
                case SortDirection.Ascending:
                default:
                    query = query.OrderBy(p => p.DateOfBirth);
                    break;

                case SortDirection.Descending:
                    query = query.OrderByDescending(p => p.DateOfBirth);
                    break;
                }
                break;
            }


            var data = query;

            return(new SortedCollection <Person, PersonSortCriteria>(data, sortCriteria, sortDirection));
        }
Пример #10
0
 public SortedCollection <Person, PersonSortCriteria> GetPersonsPaged(PersonSortCriteria sortCriteria, SortDirection sortDirection)
 {
     return(this.personsRepository.GetPersonSorted(sortCriteria, sortDirection));
 }
Пример #11
0
        public SortedPagedCollection <Person, PersonSortCriteria> GetPersonsPaged(int pageIndex, int pageSize, PersonSortCriteria sortCriteria, SortDirection sortDirection)
        {
            IEnumerable <Person> query = from persElement in this.xmlDocument.Descendants("Person")
                                         let dateOfBirthString = persElement.Element("DateOfBirth")?.Value
                                                                 let dateOfBirthFormat = persElement.Element("DateOfBirth") != null?
                                                                                         persElement.Element("DateOfBirth").Attribute("format")?.Value
                                                                                         :
                                                                                         ""
                                                                                         select new Person()
            {
                Id          = int.Parse(persElement.Attribute("id").Value),
                FirstName   = persElement.Element("FirstName")?.Value,
                LastName    = persElement.Element("LastName")?.Value,
                DateOfBirth = dateOfBirthString.ParseWithFormat(dateOfBirthFormat)
            };

            switch (sortCriteria)
            {
            case PersonSortCriteria.ById:
            default:
                switch (sortDirection)
                {
                case SortDirection.Ascending:
                default:
                    query = query.OrderBy(p => p.Id);
                    break;

                case SortDirection.Descending:
                    query = query.OrderByDescending(p => p.Id);
                    break;
                }
                break;

            case PersonSortCriteria.ByFirstName:
                switch (sortDirection)
                {
                case SortDirection.Ascending:
                default:
                    query = query.OrderBy(p => p.FirstName);
                    break;

                case SortDirection.Descending:
                    query = query.OrderByDescending(p => p.FirstName);
                    break;
                }
                break;

            case PersonSortCriteria.ByLastName:
                switch (sortDirection)
                {
                case SortDirection.Ascending:
                default:
                    query = query.OrderBy(p => p.LastName);
                    break;

                case SortDirection.Descending:
                    query = query.OrderByDescending(p => p.LastName);
                    break;
                }
                break;

            case PersonSortCriteria.ByBirthDate:
                switch (sortDirection)
                {
                case SortDirection.Ascending:
                default:
                    query = query.OrderBy(p => p.DateOfBirth);
                    break;

                case SortDirection.Descending:
                    query = query.OrderByDescending(p => p.DateOfBirth);
                    break;
                }
                break;
            }

            int totalRecordsCount = query.Count();

            var data = query.Skip(pageIndex * pageSize).Take(pageSize);

            return(new SortedPagedCollection <Person, PersonSortCriteria>(data, pageIndex, pageSize, totalRecordsCount, sortCriteria, sortDirection));
        }
        public SortedPagedCollection <Person, PersonSortCriteria> GetPersonsPaged(int pageIndex, int pageSize, PersonSortCriteria sortCriteria, SortDirection sortDirection)
        {
            var sqlSort = new StringBuilder();

            ValueTypeMultiSwitch <PersonSortCriteria, SortDirection>
            .On(sortCriteria, sortDirection)
            .Case(PersonSortCriteria.ById, SortDirection.Ascending, () => sqlSort.Append("Id Asc"))
            .Case(PersonSortCriteria.ById, SortDirection.Descending, () => sqlSort.Append("Id Desc"))
            .Case(PersonSortCriteria.ByFirstName, SortDirection.Ascending, () => sqlSort.Append("FirstName Asc"))
            .Case(PersonSortCriteria.ByFirstName, SortDirection.Descending, () => sqlSort.Append("FirstName Desc"))
            .Case(PersonSortCriteria.ByLastName, SortDirection.Ascending, () => sqlSort.Append("LastName Asc"))
            .Case(PersonSortCriteria.ByLastName, SortDirection.Descending, () => sqlSort.Append("LastName Desc"))
            .Case(PersonSortCriteria.ByBirthDate, SortDirection.Ascending, () => sqlSort.Append("DateOfBirth Asc"))
            .Case(PersonSortCriteria.ByBirthDate, SortDirection.Descending, () => sqlSort.Append("DateOfBirth Desc"))
            .Default(() => sqlSort.Append("Id Asc"))
            .Evaluate();

            var sqlData = new StringBuilder();

            sqlData.Append(@"
        SELECT * FROM
        (
        SELECT
                ROW_NUMBER() OVER (ORDER BY " + sqlSort.ToString() + @") as RowNumber,
                Id,
                FirstName,
                LastName,
                DateOfBirth,
                ImageFileName
        FROM
                Person
        ) as data
        WHERE
                data.RowNumber Between (@PageIndex * @PageSize + 1) and ((@PageIndex + 1) * @PageSize)
      ");

            var sqlCount = new StringBuilder();

            sqlCount.Append(@"
        select COUNT(*) from Person;
      ");

            List <Person> itemsPerPage      = new List <Person>();
            int           totalRecordsCount = 0;

            using (var sqlConnection = new SqlConnection(this.connectionString))
            {
                sqlConnection.Open();

                using (var sqlCmd = new SqlCommand(sqlData.ToString(), sqlConnection))
                {
                    sqlCmd.Parameters.AddWithValue("PageIndex", pageIndex);
                    sqlCmd.Parameters.AddWithValue("PageSize", pageSize);

                    using (var reader = sqlCmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            itemsPerPage.Add(new Person
                            {
                                Id            = (int)reader["Id"],
                                FirstName     = reader["FirstName"]?.ToString(),
                                LastName      = reader["LastName"]?.ToString(),
                                DateOfBirth   = (reader["DateOfBirth"] != DBNull.Value) ? (DateTime)reader["DateOfBirth"] : DateTime.MinValue,
                                ImageFileName = reader["ImageFileName"]?.ToString()
                            });
                        }
                    }
                }

                using (var sqlCmd = new SqlCommand(sqlCount.ToString(), sqlConnection))
                {
                    totalRecordsCount = (int)sqlCmd.ExecuteScalar();
                }

                sqlConnection.Close();
            }

            return(new SortedPagedCollection <Person, PersonSortCriteria>(itemsPerPage, pageIndex, pageSize, totalRecordsCount, sortCriteria, sortDirection));
        }
Пример #13
0
        public SortedPagedCollection <Person, PersonSortCriteria> GetPersonsPaged(int pageIndex, int pageSize, PersonSortCriteria sortCriteria, SortDirection sortDirection)
        {
            IEnumerable <Person> query = InMemoryPersonRepository.personsCollection;

            switch (sortCriteria)
            {
            case PersonSortCriteria.ById:
            default:
                switch (sortDirection)
                {
                case SortDirection.Ascending:
                default:
                    query = query.OrderBy(p => p.Id);
                    break;

                case SortDirection.Descending:
                    query = query.OrderByDescending(p => p.Id);
                    break;
                }
                break;

            case PersonSortCriteria.ByFirstName:
                switch (sortDirection)
                {
                case SortDirection.Ascending:
                default:
                    query = query.OrderBy(p => p.FirstName);
                    break;

                case SortDirection.Descending:
                    query = query.OrderByDescending(p => p.FirstName);
                    break;
                }
                break;

            case PersonSortCriteria.ByLastName:
                switch (sortDirection)
                {
                case SortDirection.Ascending:
                default:
                    query = query.OrderBy(p => p.LastName);
                    break;

                case SortDirection.Descending:
                    query = query.OrderByDescending(p => p.LastName);
                    break;
                }
                break;

            case PersonSortCriteria.ByBirthDate:
                switch (sortDirection)
                {
                case SortDirection.Ascending:
                default:
                    query = query.OrderBy(p => p.DateOfBirth);
                    break;

                case SortDirection.Descending:
                    query = query.OrderByDescending(p => p.DateOfBirth);
                    break;
                }
                break;
            }

            int totalRecordsCount = query.Count();

            var data = query.Skip(pageIndex * pageSize).Take(pageSize);

            return(new SortedPagedCollection <Person, PersonSortCriteria>(data, pageIndex, pageSize, totalRecordsCount, sortCriteria, sortDirection));
        }