2013-07-15 30 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); 
     } 
    } 
} 

那麼,對於循環頂部是真正的問題,我想。我想刪除已經預訂的預訂時間。

這是我的第一個for循環試出:

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#假設ReservationTimeDateTime屬性,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 in .Net已解決勾號。我打勾的時間是100納秒,所以一秒鐘內就有10,000,000個打勾。
  • 因此,您不能只清除毫秒,您必須通過計算小於1秒的剩餘部分來清除。然後從原始值中減去這些值,得到相同的結果。
  • DateTime in .Net是不可變的,所以你不能只改變一個屬性。您必須計算一個新值,然後將其分配回原始變量。
+0

你好... 我現在添加從方法中編輯我的所有代碼。 我有這個列表框在c#中 - 在java中使用jscrollpane - 並使用defaultlistmodel。 如何讓我的C#程序像我的Java一樣行事?只顯示可用的預訂。 –

+0

Ohhh ...現在.. 這個循環你有一個去... ..它清理milli的原因是看看時間是否相等。 我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!"); 
     } 
    } 

謝謝你的幫助......現在我的方法是去除已經預訂法院;-)

最親切的問候 拉斯穆斯