2010-04-13 3 views
0

C# Web Calendar 컨트롤에서 날짜를 선택하거나 선택 취소하려고합니다.ASP.NET 일정 컨트롤에서 날짜 선택 취소

내가 선택한 문제는 단 하나의 날짜 만 선택된 경우를 제외하고는 날짜를 선택하거나 선택 취소 할 수 있다는 것입니다.

클릭하면 변경된 이벤트가 트리거되지 않으므로 인디 드는 요일별 이벤트에서 작업을 수행하지만 확실하지 않습니다.

편집 : Pre_Render 이벤트 코드가 추가되었습니다. 이제는 제대로 작동하는 것 같습니다. 예를 들어 조금 엉뚱한 것 같습니다. 선택 날짜 A : OK 선택 날짜 B는 : OK 이 둘을 취소 : OK 선택 날짜 A : 선택 두 번 선택 해제 날짜 A를 필요가 작동하지 않습니다 : 좋아 선택 날짜 C : 날짜 A와 C는

를 선택

@ 존

예, 컨트롤이 .NET 2.0 프레임 워크의 일부이며 C# 자체와 관련이 없음을 알고 있습니다. 지금까지

코드 :

public static List<DateTime> list = new List<DateTime>(); 

protected void Calendar1_DayRender(object sender, DayRenderEventArgs e) 
{ 
    if (e.Day.IsSelected == true) 
    { 

      list.Add(e.Day.Date); 


    } 
    Session["SelectedDates"] = list; 
} 

protected void Calendar1_SelectionChanged(object sender, EventArgs e) 
{ 
    DateTime selection = Calendar1.SelectedDate; 

    if (Session["SelectedDates"] != null) 
    { 
     List<DateTime> newList = (List<DateTime>)Session["SelectedDates"]; 

     foreach (DateTime dt in newList) 
     { 
      Calendar1.SelectedDates.Add(dt); 
     } 

     if (searchdate(selection, newList)) 
     { 
      Calendar1.SelectedDates.Remove(selection); 
     } 


     list.Clear(); 
    } 
} 

public bool searchdate(DateTime date, List<DateTime> dates) 
{ 

    var query = from o in dates 
       where o.Date == date 
       select o; 
     if (query.ToList().Count == 0) 
     { 
      return false; 
     } 
     else 
     { 
      return true; 
     } 

    } 


    protected void Calendar1_PreRender(object sender, EventArgs e) 
    { 
     if (Calendar1.SelectedDates.Count == 1) 
     { 
      foreach (DateTime dt in list) 
      { 
       if (searchdate(dt, list) && list.Count == 1) 
       { 


        Calendar1.SelectedDates.Clear(); 

        break; 
       } 
      } 
     } 
    } 
+0

@yomismo : 당신은 아마 이것을 알고 있었지만 달력은 C#과 아무 관련이 없습니다. 이것은 .NET의 일부이며 C# 언어가 아닙니다. –

답변

1

오늘은이 문제에 대한 신속한 답변을 찾고 있었다하지만 그래서 난 내 자신의 해결책을 찾기 위해 설정 찾을 수 없습니다. 나는 거의 1 년 후에라도 여기에 올릴 것입니다. (나는이 규칙에없는 희망?)

참고 : 내 코드는 VB에 있었고,하지 C#

이 문제에 대한 내 솔루션과 같이 내 페이지 클래스에 부울 변수를 추가하는 것이 었습니다

:

부울로

희미한 blnCalendarSelectionChanged는 = 거짓

선택이 당신의 calendar_SelectionChanged 방법의 시작에 다음을 추가하여 변경된 경우 내가 추적 할 수 있어요이와

:

blnCalendarSelectionChanged = TRUE

캘린더 SelectionChanged 이벤트가 발생한 후에 만 ​​부울이 참입니다. 선택 취소 할 날짜가 하나 밖에없는 경우 SelectionChanged 이벤트가 발생하지 않습니다. 그래서 달력의 사전 렌더링에 나는 다음과 같습니다

Protected Sub calShift_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles calShift.PreRender 
    If blnCalendarSelectionChanged = False Then 
     If Not IsNothing(Session("SelectedDates")) Then 
      Dim newList As List(Of DateTime) = CType(Session("SelectedDates"), List(Of DateTime)) 
      newList.Remove(calShift.SelectedDate) 
      Session("SelectedDates") = newList 
      calShift.SelectedDate = Nothing 
     End If 
    End If 
End Sub 

그것이 DayRender 전에 실행되기 때문에 사전 렌더링에서이 작업을 수행하는 것이 중요하다. DayRender에이 코드를 추가하면 선택된 캘린더에서 날짜가 제거되지만 캘린더 렌더가 업데이트되지 않으므로 사용자에게 날짜가 계속 표시됩니다.

아직 방법을 찾을 수 없다는 문제가 있습니다. 캘린더 PreRender는 컨트롤의 포스트 백에서 실행되므로 사용자가 다른 컨트롤에서 포스트 백을 발생시킬 때 하나의 날짜가 선택되면 캘린더가 선택을 잃게됩니다. 내 경우에는 이것은 문제가되지 않지만 나는 완벽을 위해 그 주위에 방법을 찾고 있었다.

이것은 최상의 해결책은 아니지만 나에게 효과적 일 수 있습니다! :)

관련 문제