The Assigned To Me Web Part displays a summary list of any item currently assigned to you. This web part is useful in cases where your SharePoint site is divided into numerous sub-sites and lists. Items are grouped by list with a sum total of items assigned to you per list.
To download this web part as a compiled WSP package, or for more information, click here:
public class AssignedToMe : System.Web.UI.WebControls.WebParts.WebPart
{
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
// Controls are made in Render() rather than
// CreateChildControls() because the TBODY
// tag does not appear to exist in the Web.UI
// namespace and it is required for the SharePoint
// expander javascript to work
SPWeb spWebThis = SPControl.GetContextWeb(this.Context);
List<SPWeb> webs = new List<SPWeb>();
PopulateWebCollectionRecursive(webs, spWebThis);
#region Create table and header rows
Table table = new Table();
this.Controls.Add(table);
table.Attributes["class"] = "ms-settingsframe";
table.Width = Unit.Percentage(100);
table.BorderStyle = BorderStyle.None;
table.CellPadding = 1;
table.CellSpacing = 0;
table.Style.Add("border-top", "0px solid");
TableRow rowHeader = new TableRow();
table.Rows.Add(rowHeader);
TableCell cellHeaderTitle = new TableCell();
rowHeader.Cells.Add(cellHeaderTitle);
cellHeaderTitle.Wrap = false;
cellHeaderTitle.Attributes["class"] = "ms-vh2-nofilter";
cellHeaderTitle.Attributes["scope"] = "col";
cellHeaderTitle.Text = "Item";
TableCell cellHeaderModified = new TableCell();
rowHeader.Cells.Add(cellHeaderModified);
cellHeaderModified.Wrap = false;
cellHeaderModified.Attributes["class"] = "ms-vh2-nofilter";
cellHeaderModified.Attributes["scope"] = "col";
cellHeaderModified.Text = "Modified";
TableCell cellHeaderModifiedBy = new TableCell();
rowHeader.Cells.Add(cellHeaderModifiedBy);
cellHeaderModifiedBy.Wrap = false;
cellHeaderModifiedBy.Attributes["class"] = "ms-vh2-nofilter";
cellHeaderModifiedBy.Attributes["scope"] = "col";
cellHeaderModifiedBy.Text = "Modified By";
TableCell cellHeaderList = new TableCell();
rowHeader.Cells.Add(cellHeaderList);
cellHeaderList.Wrap = false;
cellHeaderList.Attributes["class"] = "ms-vh2-nofilter";
cellHeaderList.Attributes["scope"] = "col";
cellHeaderList.Text = "List";
TableCell cellHeaderSite = new TableCell();
rowHeader.Cells.Add(cellHeaderSite);
cellHeaderSite.Wrap = false;
cellHeaderSite.Attributes["class"] = "ms-vh2-nofilter";
cellHeaderSite.Attributes["scope"] = "col";
cellHeaderSite.Text = "Site";
table.RenderBeginTag(writer);
rowHeader.RenderControl(writer);
#endregion
int count = 0;
string rowClass = "";
int listIndex = 0;
foreach (SPWeb spWeb in webs)
{
foreach (SPList spList in spWeb.Lists)
{
try
{
SPField spFieldAssignedTo = spList.Fields.GetFieldByInternalName("AssignedTo");
if (spFieldAssignedTo == null)
throw new Exception();
}
catch
{
continue;
}
SPQuery spQuery = new SPQuery();
spQuery.Query = String.Format(
"<Where><Eq><FieldRef Name='{0}' LookupId='TRUE' /><Value Type='User'>{1}"
+ "</Value></Eq></Where>",
"AssignedTo",
spWebThis.CurrentUser.ID.ToString());
SPListItemCollection spListItemCollection = spList.GetItems(spQuery);
if (spListItemCollection.Count > 0)
{
listIndex++;
// This is a (messy) replication of the code used
// by SharePoint's expanding/collapsing list viewer
LiteralControl headerLiteral = new LiteralControl(String.Format(
"<TBODY id=\"titl{0}_\" groupString=\"\"><TR><TD colspan=\"100\" class=\"ms-gb\""
+ " style=\"border-bottom: 0; border-top: 0;\" nowrap>"
+ "<img src=\"/_layouts/images/blank.gif\" alt=\"\" height=1 width=0>"
+ "<a href=\"javascript:\" onclick=\"javascript:ExpCollGroup('{0}_','img_{0}_');"
+ "return false;\">"
+ "<img id=\"img_{0}_\" src=\"/_layouts/images/plus.gif\" alt=\"Expand/Collapse\""
+ " border=\"0\"></a> "
+ "<a href=\"javascript:\" onclick=\"javascript:ExpCollGroup('{0}_','img_{0}_');"
+ "return false;\">"
+ "{1}</a> ({2})</TD></TR></TBODY><TBODY id=\"tbod{0}__\""
+ " style=\"display: none;\" isLoaded=\"true\">",
"1-" + listIndex,
spList.Title,
spListItemCollection.Count));
headerLiteral.RenderControl(writer);
int item = 0;
foreach (SPListItem spListItem in spListItemCollection)
{
#region Create controls for basic item information
TableRow rowItem = new TableRow();
rowItem.Attributes["class"] = rowClass;
table.Rows.Add(rowItem);
TableCell cellItemTitle = new TableCell();
rowItem.Cells.Add(cellItemTitle);
cellItemTitle.Attributes["class"] = "ms-vb2";
cellItemTitle.VerticalAlign = VerticalAlign.Top;
HyperLink anchorItemTitle = new HyperLink();
cellItemTitle.Controls.Add(anchorItemTitle);
anchorItemTitle.NavigateUrl = spList.Forms[PAGETYPE.PAGE_DISPLAYFORM]
.ServerRelativeUrl + "?ID=" + spListItem.ID;
string strItemName = "";
SPField fieldTitle = spListItem.Fields.GetFieldByInternalName("Title");
strItemName = fieldTitle.GetFieldValueAsText(spListItem[fieldTitle.Id]);
if (strItemName == null || strItemName.Trim().Length == 0)
strItemName = "(No title)";
anchorItemTitle.Text = strItemName;
TableCell cellItemModified = new TableCell();
rowItem.Cells.Add(cellItemModified);
cellItemModified.Attributes["class"] = "ms-vb2";
cellItemModified.Wrap = false;
cellItemModified.VerticalAlign = VerticalAlign.Top;
SPField fieldModified = spListItem.Fields.GetFieldByInternalName("Modified");
cellItemModified.Text = fieldModified.GetFieldValueAsText(
spListItem[fieldModified.Id]);
TableCell cellItemModifiedBy = new TableCell();
rowItem.Cells.Add(cellItemModifiedBy);
cellItemModifiedBy.Attributes["class"] = "ms-vb2";
cellItemModifiedBy.Wrap = false;
cellItemModifiedBy.VerticalAlign = VerticalAlign.Top;
SPField fieldModifiedBy = spListItem.Fields.GetFieldByInternalName("Editor");
cellItemModifiedBy.Text = fieldModifiedBy.GetFieldValueAsHtml(
spListItem[fieldModifiedBy.Id]);
TableCell cellItemList = new TableCell();
rowItem.Cells.Add(cellItemList);
cellItemList.Attributes["class"] = "ms-vb2";
cellItemList.Wrap = false;
cellItemList.VerticalAlign = VerticalAlign.Top;
HyperLink anchorList = new HyperLink();
cellItemList.Controls.Add(anchorList);
anchorList.NavigateUrl = spList.Forms[PAGETYPE.PAGE_DISPLAYFORM].ServerRelativeUrl;
anchorList.Text = spList.Title;
TableCell cellItemSite = new TableCell();
rowItem.Cells.Add(cellItemSite);
cellItemSite.Attributes["class"] = "ms-vb2";
cellItemSite.Wrap = false;
cellItemSite.VerticalAlign = VerticalAlign.Top;
HyperLink anchorWeb = new HyperLink();
cellItemSite.Controls.Add(anchorWeb);
anchorWeb.NavigateUrl = spWeb.ServerRelativeUrl;
anchorWeb.Text = spWeb.Title;
rowItem.RenderControl(writer);
#endregion
rowClass = (rowClass == "") ? "ms-alternating" : "";
count++;
item++;
}
TableRow rowSpacer = new TableRow();
table.Rows.Add(rowSpacer);
TableCell cellSpacer = new TableCell();
cellSpacer.ColumnSpan = table.Rows.Count;
cellSpacer.Text = "<img src=\"/_layouts/images/blank.gif\" alt=\"\" height=10 width=0>";
rowSpacer.Cells.Add(cellSpacer);
rowSpacer.RenderControl(writer);
LiteralControl footerLiteral = new LiteralControl(String.Format(
"</TBODY><TBODY id=\"foot{0}__\"></TBODY>",
"1-" + listIndex));
footerLiteral.RenderControl(writer);
}
}
}
if (count == 0)
{
#region Create controls for 'no items'
TableRow rowItemNone = new TableRow();
table.Rows.Add(rowItemNone);
TableCell cellItemNone = new TableCell();
rowItemNone.Cells.Add(cellItemNone);
cellItemNone.ColumnSpan = table.Rows.Count;
cellItemNone.Attributes["class"] = "ms-propertysheet";
cellItemNone.VerticalAlign = VerticalAlign.Top;
cellItemNone.Style.Add("padding-left", "5px");
cellItemNone.Text = "No items";
rowItemNone.RenderControl(writer);
#endregion
}
table.RenderEndTag(writer);
}
private void PopulateWebCollectionRecursive(List<SPWeb> webs, SPWeb thisWeb)
{
webs.Add(thisWeb);
// Important to use .GetSubwebsForCurrentUser() as opposed
// to the .Webs collection, as the user may not be privileged
// to certain webs
foreach (SPWeb subWeb in thisWeb.GetSubwebsForCurrentUser())
PopulateWebCollectionRecursive(webs, subWeb);
}
}