20 10 2010
Calendar Year View Web Part Code Example
Had a few requests on my previous post about the Calendar Year View for a coded example. So here’s one. I’ve not fully tested this in quite a while so it might not work immediately and might need one or two modifications to the object model code to access the List properly, there’s probably some unused namespaces in the usings section, and it’s generally pretty old code (around 2 years old now, from when I first started out on developing for SharePoint, so do pick it apart and point out bad practices I’ve missed out in the comments for others to see) but should give you a good start if you want to implement something similar.
Enjoy!
1 |
using System;<br>using System.Collections.Generic;<br>using System.Linq;<br>using System.Text;<br>using System.Data;<br>using System.Drawing;<br>using System.ComponentModel;<br>using System.Diagnostics;<br>using Microsoft.SharePoint;<br>using Microsoft.SharePoint;<br><br>using System.Web;<br>using System.Web.UI;<br>using System.Web.UI.WebControls;<br>using System.Web.UI.WebControls.WebParts;<br><br>namespace CalendarYearToView<br>{<br> public class YearToViewWebPart : WebPart<br> {<br> private string _calendarName;<br> private int _year;<br> private GridView grid;<br> private DataTable table;<br> private Label errMsg;<br><br> [Browsable(true), Personalizable(PersonalizationScope.Shared), Description("The name of the Calendar to generate the view"), Category("Options"), DefaultValue(""), WebBrowsable(true), WebDisplayName("Calendar Name")]<br> public string calendarName<br> {<br> get<br> {<br> return this._calendarName;<br> }<br> set<br> {<br> this._calendarName = value;<br> }<br> }<br><br> [Browsable(true), Personalizable(PersonalizationScope.Shared), Description("The year from which to generate the view"), Category("Options"), DefaultValue(""), WebBrowsable(true), WebDisplayName("Year")]<br> public int year<br> {<br> get<br> {<br> return this._year;<br> }<br> set<br> {<br> this._year = value;<br> }<br> }<br><br> public YearToViewWebPart()<br> {<br><br> }<br><br> protected override void CreateChildControls()<br> {<br> base.CreateChildControls();<br> if (!hasControlBeenConfigured())<br> return;<br><br> this.grid = new GridView();<br> this.errMsg = new Label();<br><br> // Base Formatting<br><br> this.grid.AutoGenerateColumns = true;<br> this.grid.AllowSorting = false;<br> this.grid.HeaderStyle.Font.Bold = true;<br> this.grid.Visible = true;<br> this.grid.ShowHeader = true;<br> this.grid.ShowFooter = false;<br> this.grid.ForeColor = Color.Black;<br> this.grid.HeaderStyle.BackColor = Color.DarkGray;<br><br> if (!BuildTable())<br> {<br> errMsg.Text += "<br>Problem Building Table";<br> this.Controls.Add(errMsg);<br> return;<br> }<br> table.DefaultView.Sort = table.Columns[0] + " ASC";<br> this.grid.RowDataBound += new GridViewRowEventHandler(grid_RowDataBound);<br> this.grid.DataSource = table;<br> this.grid.DataBind();<br> this.grid.Width = Unit.Percentage(100);<br><br> this.Controls.Add(grid);<br> }<br><br> void grid_RowDataBound(object sender, GridViewRowEventArgs e)<br> {<br> // Bail if it's the header.<br> if (e.Row.RowType == DataControlRowType.Header)<br> return;<br><br> if (e.Row.RowType == DataControlRowType.DataRow)<br> {<br> // Render HTML for URLS<br> foreach (TableCell cell in e.Row.Cells)<br> {<br> cell.Text = Context.Server.HtmlDecode(cell.Text);<br> }<br><br> if (e.Row.Cells[0].Text.ToLower().Contains("tentative"))<br> {<br> foreach (TableCell cell in e.Row.Cells)<br> {<br> if (cell.Text.Length > 1)<br> {<br> cell.BorderColor = Color.Red;<br> cell.BorderWidth = Unit.Pixel(2);<br> }<br> }<br> }<br> }<br><br> }<br><br> protected override void RenderContents(HtmlTextWriter writer)<br> {<br> if (!hasControlBeenConfigured())<br> {<br> writer.Write("Please complete the options for this Web Part.");<br> return;<br> }<br><br> this.grid.RenderControl(writer);<br> this.errMsg.RenderControl(writer);<br> }<br><br> private bool hasControlBeenConfigured()<br> {<br> if (this._calendarName == null)<br> return false;<br> return true;<br> }<br><br> private bool BuildTable()<br> {<br> // First, try to load the List and bail if it can't find it.<br> SPList calList;<br> SPWeb oWeb = SPContext.Current.Web;<br><br><br> calList = oWeb.GetList(oWeb.Url + "/Lists/" + this._calendarName);<br> if (year == 0) year = DateTime.Now.Year;<br><br> // Make sure the list in question has a "Title" and a "Start Date" field.<br> // .. to do ;)<br><br> // Buid the table.<br> this.table = new DataTable();<br> table.Columns.Add(new DataColumn("Event"));<br> table.Columns.Add(new DataColumn("Jan"));<br> table.Columns.Add(new DataColumn("Feb"));<br> table.Columns.Add(new DataColumn("Mar"));<br> table.Columns.Add(new DataColumn("Apr"));<br> table.Columns.Add(new DataColumn("May"));<br> table.Columns.Add(new DataColumn("Jun"));<br> table.Columns.Add(new DataColumn("Jul"));<br> table.Columns.Add(new DataColumn("Aug"));<br> table.Columns.Add(new DataColumn("Sep"));<br> table.Columns.Add(new DataColumn("Oct"));<br> table.Columns.Add(new DataColumn("Nov"));<br> table.Columns.Add(new DataColumn("Dec"));<br><br> SPQuery query = new SPQuery() { Query = ""; }<br> foreach (SPListItem item in calList.GetItems(query))<br> {<br> // Extract the Day, Month and Year from the start Date field<br> DateTime eventDate = (DateTime)item["Start Time"];<br> DateTime endDate = (DateTime)item["End Time"];<br> if (eventDate.Year != year)<br> continue;<br><br> DataRow row = table.NewRow();<br> string eventURL = "<a href="http://www.blogger.com/+%20oWeb.Url%20+%20%22/Lists/%22%20+%20calList.Title%20+%20%22/DispForm.aspx?ID=%22%20+%20item.ID%20+">";<br> eventURL += "Details</a>";<br> row[0] = item.Title + " (" + eventURL + ")";<br><br> // Does this event span 2 months?<br> if (eventDate.Month == endDate.Month)<br> {<br> if (eventDate.Day.ToString().Equals(endDate.Day.ToString()))<br> {<br> row[eventDate.Month] = eventDate.Day.ToString();<br> }<br> else<br> {<br> row[eventDate.Month] = eventDate.Day.ToString() + " - " + endDate.Day.ToString();<br> }<br> }<br> else<br> {<br> row[eventDate.Month] = eventDate.Day.ToString();<br> row[endDate.Month] = endDate.Day.ToString();<br> }<br> table.Rows.Add(row);<br> }<br><br> return true;<br><br> }<br> }<br>}<br> |
SSIS Error: An OLE DB error has occurred. Error code: 0x80040E09 – SELECT Permission was denied… Sandboxed Visual Web Part in VS2010 – ‘InitializeControl’ does not exist