2013-07-15 3 views
0

У меня есть приложение Java, которое я пытаюсь преобразовать в C#. Я решил справедливый бит программы, но у меня есть этот ясный метод, который беспокоит меня:C# datetimepicker удалить определенные элементы

private void checkCourts() 
{ 
    if (splMonth.getSelectedValue() != null && splDate.getSelectedValue() != null) 
    { 
     courtModel.clear(); 
     Calendar booking = new GregorianCalendar(); 

     int year = Calendar.getInstance().get(Calendar.YEAR); 
     int month = new Scanner(splMonth.getSelectedValue().toString()).nextInt() - 1; 
     int date = new Scanner(splDate.getSelectedValue().toString()).nextInt(); 
     int time = Integer.parseInt(cmbxTime.getSelectedItem().toString()); 
     int currentMonth = Calendar.getInstance().get(Calendar.MONTH); 
     int currentDate = Calendar.getInstance().get(Calendar.DAY_OF_MONTH); 
     int currentTime = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); 
     booking.set(year, month, date, time, 0, 0); 

     if (month > currentMonth || (month == currentMonth && date > currentDate) || (month == currentMonth && date == currentDate && time > currentTime)) 
     { 

      try 
      { 
       ArrayList<Reservation> rs = BookingManager.getInstance().getReservations(); 
       Reservation r = new Reservation(booking); 
       ArrayList<String> courtNames = BookingManager.getInstance().getCourtsName(); 

       for (int i = 0; i < rs.size(); i++) 
       { 

        r.getReservationTime().clear(Calendar.MILLISECOND); 
        rs.get(i).getReservationTime().clear(Calendar.MILLISECOND); 
       } 

       if (!rs.contains(r)) 
       { 
        for (String c : courtNames) 
        { 
         courtModel.addElement(c); 
        } 
       } 
       else 
       { 
        for (String c : courtNames) 
        { 
         courtModel.addElement(c); 
        } 

        for (int i = 0; i < rs.size(); i++) 
        { 
         if (r.getReservationTime().getTime().equals(rs.get(i).getReservationTime().getTime())) 
         { 
          String courtName = BookingManager.getInstance().getNameById(rs.get(i).getCourtId()); 
          courtModel.removeElement(courtName); 
         } 
        } 
       } 
       splCourt.setModel(courtModel); 
      } 
      catch (Exception e) 
      { 
       System.out.println("ERROR - " + e.getMessage()); 
      } 
     } 
     else 
     { 
      JOptionPane.showMessageDialog(null, "Den valgte dato er ikke tilgængelig for booking.", "Advarsel", JOptionPane.INFORMATION_MESSAGE); 
     } 
    } 
} 

Ну, верхний цикл является реальной проблемой, я думаю. Я хотел бы удалить время резервирования, которое уже было забронировано.

Это мой первый для контура опробования:

private void checkCourts() 
    { 
     DateTime current = DateTime.Now; 

     int year = Int32.Parse(DateTimePicker.Value.ToString("yyyy")); 
     int currentYear = current.Year; 

     int month = Int32.Parse(DateTimePicker.Value.ToString("MM")); 
     int currentMonth = current.Month; 

     int day = Int32.Parse(DateTimePicker.Value.ToString("dd")); 
     int currentDay = current.Day; 

     int time = (int)cmbxTime.SelectedItem; 

     int currentTime = current.TimeOfDay.Hours; 

     string date1 = year.ToString() + "," + month.ToString() + "," + day.ToString(); 
     DateTime thisdate = DateTime.Parse(date1); 
     thisdate = thisdate.AddHours(time); 

     List<Reservation> rs = BookingManager.getInstance().getReservations(); 
     Reservation r = new Reservation(thisdate); 
     List<string> courtNames = BookingManager.getInstance().getCourtsName(); 

     if (month > currentMonth || (month == currentMonth && day > currentDay) || 
      (month == currentMonth && day == currentDay && time > currentTime) && year >= currentYear) 
     { 
      try 
      { 
       for (int i = 0; i < rs.Count; i++) 
       { 
        r.ReservationTime = r.ReservationTime.AddTicks(-r.ReservationTime.Ticks % 10000000); 
        rs[i].ReservationTime = rs[i].ReservationTime.AddTicks(-rs[i].ReservationTime.Ticks % 10000000); 
       } 

       if (!rs.Contains(r)) 
       { 
        foreach (string c in courtNames) 
        { 
         lboxCourts.Items.Add(c); 
        } 
       } 
       else 
       { 
        foreach (string c in courtNames) 
        { 
         lboxCourts.Items.Add(c); 
        } 

        for (int i = 0; i < rs.Count; i++) 
        { 
         if (r.ReservationTime.Equals(rs[i].ReservationTime)) 
         { 
          String courtName = BookingManager.getInstance().getNameById(rs[i].CourtId); 
          lboxCourts.Items.Remove(courtName); 
          MessageBox.Show("is equal"); 
         } 
        } 
       } 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.Message); 
      } 
     } 
     else 
     { 
      MessageBox.Show("Den valgte dato er ikke gyldig! - vær opmærksom på at hvis du vælger dags dato, at tidspunktet ikke kan være tidligere end nuværende tidspunkt!"); 
     } 
    } 

Надеется, что вы можете очистить мой взгляд .. я просто потерял фокус. Я знаю, что я вижу в Интернете, - что datetimepicker не так легко редактировать. Но тогда я бы просто отредактировал уже забронированный предмет - что-то вроде «уже забронировано».

+0

Попробуйте: 'DateTimePicker.Format = DateTimePickerFormat.Custom;' вместе с 'DateDateTimePicker.CustomFormat =" ";' – Brian

ответ

0

Согласно the docs, код Java .clear(Calendar.MILLISECOND) просто удаляет любые миллисекунды из значения. Это не делает ничего с вашей логикой приложения, чтобы удалить фактическое время резервирования. Похоже, что он не связан ни с каким видом DateTimePicker.

Предполагая, что в C#, что ReservationTime является DateTime собственности и r.ReservationTime является другим свойством, чем rs[i].ReservationTime, то вам нужно будет сделать следующее:

for (int i = 0; i < rs.Count; i++) 
{ 
    r.ReservationTime = r.ReservationTime.AddTicks(-r.ReservationTime.Ticks % 10000000); 
    rs[i].ReservationTime = rs[i].ReservationTime.AddTicks(-rs[i].ReservationTime.Ticks % 10000000); 
} 

Есть несколько моментов, чтобы отметить:

  • Класс Java Calendar имеет разрешение миллисекунды, поэтому удаление миллисекунд будет усекать значение ко второму.
  • DateTime в .Net имеет разрешение на tick. Я делаю отметку 100 наносекунд, так что в секунду есть 10 000 000 тиков.
  • Следовательно, вы не можете просто очистить миллисекунды, вам нужно очистить, вычислив оставшуюся часть тиков меньше одной секунды. Затем они вычитаются из исходного значения, получая тот же результат.
  • DateTime в .Net неизменен, поэтому вы не можете просто изменить одно свойство. Вы должны вычислить новое значение, а затем присвоить его исходной переменной.
+0

Привет ... У меня теперь есть отредактировал весь мой код из метода. У меня есть этот список в C# - с помощью jscrollpane в java - и с использованием модели по умолчанию. Как я могу сделать свою программу C# как мой java .. только показывая доступные заказы. –

+0

Ohhh ... now .. В этом цикле у вас есть продолжение .. причина, по которой он очищает миллионы, - это посмотреть, равны ли часы. Две строки в цикле my for проверяют, находится ли выбранное резервирование (с часами) в любой оговорке в базе данных. Я пытаюсь решить это - я дам вам хедз-ап, если я смогу исправить это на моем собственном .. но спасибо за «решение» - я дам вам репутацию, если это сработает ;-) –

0

Это закончилось так:

for (int i = 0; i < rs.Count; i++) 
       { 
        r.ReservationTime = r.ReservationTime; 
        rs[i].ReservationTime = DateTime.Parse(rs[i].ReservationTime.ToString()); 

        if (thisdate.CompareTo(rs[i].ReservationTime) != 0) 
        { 
         foreach (string c in courtNames) 
         { 
          lboxCourts.Items.Add(c); 
         } 
        } 
        else 
        { 
         lboxCourts.Items.Clear(); 
         foreach (string c in courtNames) 
         { 
          lboxCourts.Items.Add(c); 
         } 

         for (int j = 0; j < rs.Count; j++) 
         { 
          if (r.ReservationTime.Equals(rs[j].ReservationTime)) 
          { 
           string courtName = BookingManager.getInstance().getNameById(rs[j].CourtId); 
           lboxCourts.Items.Remove(courtName); 
          } 
         } 
        } 
       } 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.Message); 
      } 
     } 
     else 
     { 
      MessageBox.Show("Den valgte dato er ikke gyldig! - vær opmærksom på at hvis du vælger dags dato, at tidspunktet ikke kan være tidligere end nuværende tidspunkt!"); 
     } 
    } 

Спасибо за вашу помощь ... теперь мой метод удаления уже Забронированный суды ;-)

сердечным приветом Rasmus