Here is my code ....
I have 9 events on the 29th of April
using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using System.Data;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
namespace CalendarWebPart
{
[Guid("e2f258df-cbe5-484e-a22e-82ad8789f2d8")]
public class Calendar : System.Web.UI.WebControls.WebParts.WebPart
{
private SPCalendarView calView;
public Calendar()
{
}
protected override void CreateChildControls()
{
base.CreateChildControls();
calView = new SPCalendarView();
calView.DataSource = getCalendarItems();
calView.ViewType = getCalendarType();
calView.DataBind();
Controls.Add(calView);
}
private string getCalendarListName()
{
return "Calendar";
}
private SPCalendarItemCollection getCalendarItems()
{
SPCalendarItemCollection items = new SPCalendarItemCollection();
SPWeb oWeb = SPContext.Current.Web;
SPList list = oWeb.Lists[getCalendarListName()];
string displayFormUrl = string.Empty;
foreach (SPForm form in list.Forms)
if (form.Type == PAGETYPE.PAGE_DISPLAYFORM)
{
displayFormUrl = form.ServerRelativeUrl;
break;
}
DataTable dt = loadCalendar();
foreach (DataRow row in dt.Rows)
{
SPCalendarItem item = new SPCalendarItem();
item.ItemID = row["ID"].ToString();
item.DisplayFormUrl = displayFormUrl;
item.StartDate = DateTime.Parse(row["EventDate"].ToString());
item.EndDate = DateTime.Parse(row["EndDate"].ToString());
item.hasEndDate = true;
item.Title = row["Location"].ToString();
item.Location = row["Location"].ToString();
item.Description = row["Description"].ToString();
if (row["fAllDayEvent"] == System.DBNull.Value)
{
item.IsAllDayEvent = false;
}
else
{
item.IsAllDayEvent = (int.Parse(row["fAllDayEvent"].ToString()) != 0);
}
item.IsRecurrence = (int.Parse(row["fRecurrence"].ToString()) != 0);
item.CalendarType = Convert.ToInt32(SPCalendarType.Gregorian);
items.Add(item);
}
return items;
}
public DataTable loadCalendar()
{
string calPeriod = "Month";
DateTime calDate = System.DateTime.Now;
if (Page.Request.QueryString["CalendarPeriod"] != null)
calPeriod = Page.Request.QueryString["CalendarPeriod"];
if (Page.Request.QueryString["CalendarDate"] != null)
calDate = Convert.ToDateTime(Page.Request.QueryString["CalendarDate"]);
DataTable dt = new DataTable();
SPSite oSite = SPContext.Current.Site;
SPWeb oWeb = oSite.OpenWeb();
SPList oList = oWeb.Lists[getCalendarListName()];
SPQuery oQuery = new SPQuery();
oQuery.CalendarDate = calDate;
string strWhere = string.Empty;
strWhere += "<Where>";
strWhere += " <DateRangesOverlap>";
strWhere += " <FieldRef Name='EventDate'/>";
strWhere += " <FieldRef Name='EndDate'/>";
strWhere += " <FieldRef Name='RecurrenceID'/>";
strWhere += " <Value Type='DateTime'><" + calPeriod + "/></Value>";
strWhere += " </DateRangesOverlap>";
strWhere += "</Where>";
oQuery.Query = strWhere;
oQuery.ViewFields = getViewFields();
SPListItemCollection oItems = oList.GetItems(oQuery);
dt = (oItems.Count > 0) ? oItems.GetDataTable() : null;
return dt;
}
protected string getViewFields()
{
string strViewFields = string.Empty;
strViewFields += "<FieldRef Name='ID' />";
strViewFields += "<FieldRef Name='Title' />";
strViewFields += "<FieldRef Name='EventDate' />";
strViewFields += "<FieldRef Name='EndDate' />";
strViewFields += "<FieldRef Name='Location' />";
strViewFields += "<FieldRef Name='Description' />";
strViewFields += "<FieldRef Name='fRecurrence' />";
strViewFields += "<FieldRef Name='fAllDayEvent' />";
return strViewFields;
}
public string getCalendarType()
{
if (Page.Request.QueryString["CalendarPeriod"] == null)
return string.Empty;
else
return Page.Request.QueryString["CalendarPeriod"].ToString().ToLower();
}
}
}