コード例 #1
0
        protected void clDatesTo_SelectedDateChanged(object sender, SelectedDateChangedEventArgs e)
        {
            if (!e.NewDate.HasValue)
            {
                SelectedArrivalDateTo = e.OldDate ?? SelectedArrivalDateFrom ?? FirstArrivalDate;
                clDatesTo.Focus();
                return;
            }

            if (!ArrivalDates.Any(p => p.Date == e.NewDate))
            {
                SelectedArrivalDateTo = e.OldDate;
                clDatesTo.Focus();
                QDSearch.Helpers.Web.ShowMessage(sender as Control, "В эту дату нету вылетов выберете другую дату");
                return;
            }

            if (!SelectedArrivalDateFrom.HasValue || e.NewDate.Value < SelectedArrivalDateFrom.Value)
            {
                SelectedArrivalDateFrom = e.NewDate;
            }

            if ((e.NewDate.Value - SelectedArrivalDateFrom.Value).Days > MaxArrivalRange)
            {
                SelectedArrivalDateFrom = ArrivalDates.Cast <DateTime?>().OrderBy(d => d).FirstOrDefault(d => d >= e.NewDate.Value.AddDays(-MaxArrivalRange) && d <= e.NewDate);
                QDSearch.Helpers.Web.ShowMessage(sender as Control, String.Format(@"Выбран период заездов больше {0}. Дата ""C"" изменена на {1:dd.MM.yyyy}", MaxArrivalRange, SelectedArrivalDateFrom));
            }

            IsArrivalDateChangedByUser = true;
            OnSelectedArrivalRangeChanged(new EventArgs());
        }
コード例 #2
0
        /// <summary>
        /// Задает период дат заездов из загруженных в календарь дат заездов.
        /// Если дата dateFrom отстуствует среди загруженных дат заездов в каледарь, то выбирается ближайшая большая.
        /// Если дата dateTo отстуствует среди загруженных дат заездов в каледарь, то выбирается ближайшая меньшая.
        /// Если разница между датами С и ПО больше MaxArrivalRange, то в этом случае дата ПО автоматически обрезатеся до дата С плюс MaxArrivalRange.
        /// Если в заданном диапозоне нет дат заездов, то происходит сброс ранее выбранных дат и новые даты заездов не выбираеются.
        /// </summary>
        /// <param name="dateFrom">Дата начала выбираемого диапозона дат заездов включительно.</param>
        /// <param name="dateTo">Дата конца выбираемого диапозона дат заездов включительно.</param>
        /// <returns>true - даты заездов подобраны успешно, false - в указанном диапозен нет дат заездов</returns>
        public bool SelectArrivalRange(DateTime dateFrom, DateTime dateTo)
        {
            if (dateFrom < DateTime.Today)
            {
                throw new ArgumentOutOfRangeException("dateFrom", dateFrom, "Дата ОТ не может быть меньше текущей даты");
            }
            if (dateTo < DateTime.Today)
            {
                throw new ArgumentOutOfRangeException("dateTo", dateTo, "Дата ДО не может быть меньше текущей даты");
            }
            if (dateFrom > dateTo)
            {
                throw new ArgumentOutOfRangeException("dateFrom", dateFrom, "Дата ОТ не может быть больше даты ДО.");
            }
            if ((dateTo - dateFrom).Days > MaxArrivalRange)
            {
                dateTo = dateFrom.AddDays(MaxArrivalRange);
            }

            if (ArrivalDates == null || !ArrivalDates.Any())
            {
                ClearSelectedArrivalRange();
                return(false);
            }

            var selectedDateFrom = ArrivalDates.Cast <DateTime?>().OrderBy(d => d).FirstOrDefault(d => d >= dateFrom.Date);

            if (!selectedDateFrom.HasValue)
            {
                ClearSelectedArrivalRange();
                return(false);
            }
            var selectedDateTo = ArrivalDates.Cast <DateTime?>().OrderBy(d => d).LastOrDefault(d => d <= dateTo.Date && d >= selectedDateFrom);

            if (!selectedDateTo.HasValue)
            {
                ClearSelectedArrivalRange();
                return(false);
            }
            clDatesFrom.SelectedDate = selectedDateFrom;
            clDatesTo.SelectedDate   = selectedDateTo;
            return(true);
        }