在SPList Item 的Recurrence 属性,例如设置 开始时间 20090201,结束时间 20090228,Recurrence 设置一个星期一次,这下以前的webpart Calendar 就识别不了一个星期一次,默认将日期 20090201 -20090228 所有日子当作 EventDate  .......
没试过设置还真的被它搞了一头雾水,后来通过SPCAMLEditor tool 的使用,点击list name -》 Current Events
查看了它的SchemaXml 的query 发现它是这样查询的

  <Where>
    
<DateRangesOverlap>
      
<FieldRef Name="EventDate" />
      
<FieldRef Name="EndDate" />
      
<FieldRef Name="RecurrenceID" />
      
<Value Type="DateTime">
        
<Now />
      
</Value>
    
</DateRangesOverlap>
  
</Where>
  
<OrderBy>
    
<FieldRef Name="EventDate" />
  
</OrderBy>
</Query>

所以那个Calendar 的webpart 就要改了 ~~
思路 是先查 当天有没有Recurrence =0的Event,没有的话再查有没有Recurrence =1的Event, 有就跳出 绑定 ~

 SharePoint.Panda.Calendar {
    [Guid ( "9c7c129b-9442-4d16-a30f-c1d43c35c0e3" )]
    
public class WebPart1 : System.Web.UI.WebControls.WebParts.WebPart {
        
public WebPart1 () {
        }
        System.Web.UI.WebControls.Calendar cal;
        
string url;
        Literal redire 
= new Literal ();

        
private string _eventName = "CLP.SRS.Events";
        [Personalizable ( PersonalizationScope.Shared ), WebBrowsable ( 
true ), WebDisplayName ( "Event name" ), WebDescription ( "Input event name" )]
        
public string eventName {
            
get { return _eventName; }
            
set { _eventName = value; }
        }

        
private DateTime _monthStartDate;

        
public DateTime MonthStartDate {
            
get { return _monthStartDate; }
            
set { _monthStartDate = value; }
        }

        
private DateTime _monthEndDate;

        
public DateTime MonthEndDate {
            
get { return _monthEndDate; }
            
set { _monthEndDate = value; }
        }

        
private bool setMonth = false;

        
protected override void OnInit ( EventArgs e ) {
            
this.EnsureChildControls ();
            
this.Load += new EventHandler ( Calendar_Load );
            
base.OnInit ( e );
        }
        
void Calendar_Load ( object sender, EventArgs e ) {
            
if ( string.IsNullOrEmpty ( Page.Request.Url.ToString () ) ) {
                
return;
            }
            
if ( this.WebPartManager.DisplayMode == WebPartManager.EditDisplayMode ) {
                
return;
            }
        }

        
protected override void CreateChildControls () {
            cal 
= new System.Web.UI.WebControls.Calendar ();
            
this.cal.ID = "Calendar";
            
this.cal.CssClass = "CLPSRS_Calendar";
            
this.cal.BorderWidth = Unit.Pixel ( 0 );
            
this.cal.BorderStyle = BorderStyle.None;
            
this.cal.TitleStyle.CssClass = "Calenader_Header";
            
this.cal.OtherMonthDayStyle.CssClass = "Calendar_IsOtherMonth";
            
this.cal.SelectedDayStyle.CssClass = "Calendar_SelectedDay";
            
this.cal.DayRender += new System.Web.UI.WebControls.DayRenderEventHandler ( OnDayRender );
            
this.cal.SelectionChanged += new EventHandler ( this.cal_SelectionChanged );
            
this.Controls.Add ( cal );
            
this.Controls.Add ( redire );

        }
        
protected void cal_SelectionChanged ( object sender, EventArgs e ) {
            System.Web.UI.WebControls.Calendar sendCal 
= ( System.Web.UI.WebControls.Calendar ) sender;
            RenderEventsByDate ( sendCal.SelectedDate );
        }

        
private void RenderEventsByDate ( DateTime selectedDate ) {
            
if ( !string.IsNullOrEmpty ( eventName ) ) {
                SPSecurity.RunWithElevatedPrivileges ( 
delegate () {
                    
using ( SPSite site = new SPSite ( SPContext.Current.Site.ID ) ) {
                        
try {
                            
using ( SPWeb web = site.RootWeb ) {
                                
try {
                                    url 
= SPContext.Current.Web.Url + "/Lists/" + eventName.Replace ( ".""" ) + "/calendar.aspx?CalendarDate=" +
                                       
string.Format ( "{0:00}", selectedDate.Day ) + Page.Server.UrlEncode ( "/" ) + string.Format ( "{0:00}", selectedDate.Month ) + Page.Server.UrlEncode ( "/" ) +
                                         selectedDate.Year.ToString () 
+ "&CalendarPeriod=month";
                                    redire.Text 
= "<script language='javascript'>window.location='" + url + "'</script>";

                                } 
catch ( Exception ee ) {
                                    web.Dispose ();
                                }
                            }
                        } 
catch ( Exception ee ) {
                            site.Dispose ();
                        }
                    }
                } );
            }
        }

        
protected void OnDayRender ( object sender, DayRenderEventArgs e ) {
            CalendarDay day 
= ( ( DayRenderEventArgs ) e ).Day;
            TableCell cell 
= ( ( DayRenderEventArgs ) e ).Cell;
            cell.CssClass 
= "Calendar_Day";
            
if ( !setMonth && day.IsOtherMonth ) {
                MonthStartDate 
= day.Date.AddDays ( 1 - day.Date.Day ).AddMonths ( 1 );
                MonthEndDate 
= MonthStartDate.AddMonths ( 1 ).AddDays ( -1 );
                setMonth 
= true;
            }
            
if ( day.IsToday && !day.IsOtherMonth ) {
                cell.CssClass 
= "Calendar_IsToday";
            } 
else if ( day.IsOtherMonth ) {
                cell.CssClass 
= "Calendar_IsOtherMonth";
                
if ( DateTime.Compare ( day.Date, MonthStartDate ) < 0 ) {
                    DateTime weekend 
= day.Date.AddDays ( 6 - day.Date.DayOfWeek.GetHashCode () );
                    
if ( weekend.Month == day.Date.Month ) {
                        cell.Text 
= "&nbsp;";
                    } 
else {
                        cell.ForeColor 
= System.Drawing.Color.Gray;
                    }
                } 
else if ( DateTime.Compare ( day.Date, MonthEndDate ) > 0 ) {
                    DateTime weekStart 
= day.Date.AddDays ( -day.Date.DayOfWeek.GetHashCode () );
                    
if ( weekStart.Month == day.Date.Month ) {
                        cell.Text 
= "&nbsp;";
                    } 
else {
                        cell.ForeColor 
= System.Drawing.Color.Gray;
                    }
                }

            }
            
if ( !string.IsNullOrEmpty ( eventName ) ) {
                SPSecurity.RunWithElevatedPrivileges ( 
delegate () {
                    
using ( SPSite site = new SPSite ( SPContext.Current.Site.ID ) ) {
                        
try {
                            
using ( SPWeb web = site.RootWeb ) {
                                
try {
                                     
//check items with not recurrence 
                                    SPQuery query = new SPQuery ();
                                    query.ExpandRecurrence 
= false;
                                    query.Query 
= string.Format ( "<OrderBy><FieldRef Name=\"EventDate\" /></OrderBy><Where><And><And><Geq><FieldRef Name='EventDate'/><Value Type='DateTime'>{0}</Value></Geq><Leq><FieldRef Name='EventDate'/><Value Type='DateTime'>{1}</Value></Leq></And><Eq><FieldRef Name='fRecurrence'/><Value Type='Recurrence'>0</Value></Eq></And></Where>", SPUtility.CreateISO8601DateTimeFromSystemDateTime ( day.Date ), SPUtility.CreateISO8601DateTimeFromSystemDateTime ( day.Date ) );
                                    SPListItemCollection calendarItems 
= web.Lists [eventName].GetItems ( query );
                                    
if ( calendarItems.Count > 0 ) {
                                        
for ( int i = 0; i < calendarItems.Count; i++ ) {
                                            DateTime startDate
=( DateTime ) calendarItems [i] ["EventDate"];
                                            
if ( DateTime.Compare ( new DateTime(startDate.Year,startDate.Month,startDate.Day), day.Date ) <= 0 && DateTime.Compare ( day.Date, ( DateTime ) calendarItems [i] ["EndDate"] ) <= 0 ) {
                                                cell.CssClass 
= "Calendar_EventDay";
                                                
break;
                                            }
                                        }
                                    } 
else {
                                        
//check items with recurrence 
                                        SPQuery query2 = new SPQuery ();
                                        query2.ExpandRecurrence 
= true;
                                        query2.Query 
= string.Format ( "<Where><DateRangesOverlap><FieldRef Name=\"EventDate\" /><FieldRef Name=\"EndDate\" /><FieldRef Name=\"RecurrenceID\" /><Value Type=\"DateTime\"><Now /></Value></DateRangesOverlap></Where><OrderBy><FieldRef Name=\"EventDate\" /></OrderBy>");
                                        SPListItemCollection calendarItems2 
= web.Lists [eventName].GetItems ( query2 );
                                        
if ( calendarItems2.Count > 0  ) {                                            
                                             
// date <S0 || date > En 的时候 直接退出 减少循环  分 n>0 和 n=0
                                            if ( calendarItems2.Count > 1 ) {
                                                DateTime startDate 
= ( DateTime ) calendarItems2 [0] ["EventDate"];
                                                DateTime endDate 
= ( DateTime ) calendarItems2 [calendarItems2.Count - 1] ["EndDate"];
                                                
if ( DateTime.Compare ( new DateTime ( startDate.Year, startDate.Month, startDate.Day ), day.Date ) > 0 || DateTime.Compare ( day.Date, new DateTime ( endDate.Year, endDate.Month, endDate.Day ) ) > 0 ) {
                                                    
return;
                                                }
                                            } 
else{
                                                DateTime startDate 
= ( DateTime ) calendarItems2 [0] ["EventDate"];
                                                DateTime endDate 
= ( DateTime ) calendarItems2 [0] ["EndDate"];
                                                
if ( DateTime.Compare ( new DateTime ( startDate.Year, startDate.Month, startDate.Day ), day.Date ) > 0 || DateTime.Compare ( day.Date, new DateTime ( endDate.Year, endDate.Month, endDate.Day ) ) > 0 ) {
                                                    
return;
                                                }
                                            }                                    
                                            
for ( int i = 0; i < calendarItems2.Count; i++ ) {
                                                DateTime startDate 
= ( DateTime ) calendarItems2 [i] ["EventDate"];
                                                
if ( DateTime.Compare ( new DateTime ( startDate.Year, startDate.Month, startDate.Day ), day.Date ) <= 0 && DateTime.Compare ( day.Date, ( DateTime ) calendarItems2 [i] ["EndDate"] ) <= 0 ) {
                                                    cell.CssClass 
= "Calendar_EventDay";
                                                    
break;
                                                } 
                                            }
                                               
                                        }

                                    }
                                } 
catch ( Exception ee ) {
                                    web.Dispose ();
                                    
string error = ee.ToString ();
                                }
                            }
                        } 
catch ( Exception ee ) {
                            site.Dispose ();
                            
string error = ee.ToString ();
                        }
                    }
                } );
            }
        }
        
protected override void Render ( HtmlTextWriter writer ) {
            EnsureChildControls ();
            redire.RenderControl ( writer );
            cal.RenderControl ( writer );
        }
    }
}


相关文章:

  • 2021-12-18
  • 2021-12-23
  • 2022-01-29
  • 2022-12-23
  • 2022-02-19
  • 2022-01-31
  • 2021-06-09
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-09-14
  • 2021-08-24
  • 2021-12-04
  • 2022-01-19
相关资源
相似解决方案