This browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
Download Microsoft Edge
More info about Internet Explorer and Microsoft Edge
Applies to:
SharePoint Foundation 2010
This programming task shows how to create a custom view for a standard Microsoft SharePoint Foundation list. In the following example, you create two custom resources: One resource specifies text to introduce a custom link that is provided in the page footer section, and the other modifies the text that is displayed when the list contains no items. The XSLT example overrides the default FreeForm template to define a special footer section with a link to another location in the site collection. It also overrides the ViewEmpty template to modify the text that is rendered for empty lists.
This programming task demonstrates the following steps to create a custom view and implement resources in the view:
Create a custom list definition in Microsoft Visual Studio 2010.
Add an XSLT file to the project, and change the
XslLink
value in
Schema.xml
so that it references your XSLT file.
Add a resource file to your project that defines resource strings.
Add parameter bindings to the list’s Schema.xml file, and add declarations to your XSLT file to consume the parameters.
For a programming task that shows how to customize field rendering in list views, see
How to: Customize the Rendering of a Field on a List View
.
To create a custom list definition
In Visual Studio 2010, on the
File
menu, point to
New
, and then click
Project
.
In the
New Project
dialog box, under
Installed Templates
, expand either the
Visual Basic
node or the
Visual C#
node.
Expand the
SharePoint
node, and select
2010
.
Under
Project Type
, select
List Definition
.
Type a name for the list definition project, and then click
OK
.
In the
SharePoint Customization Wizard
, specify a site to use for debugging. For the trust level of your solution, select
Deploy as a farm solution
, and then click
Next
.
In the
Choose List Definition Settings
dialog box, specify a display name for your list definition, select the base list type that you want to use for your definition, and click
Finish
. The display name that you specify is the name that appears on the
Create
page.
To add and reference an XSLT file
In
Solution Explorer
, right-click the project, point to
Add
, and then click
SharePoint Mapped Folder
.
In the
Add SharePoint Mapped Folder
dialog box, select the
{SharePointRoot}\TEMPLATE\LAYOUTS\XSL
folder, and then click
OK
.
In
Solution Explorer
, right-click the new
XSL
folder, point to
Add
, and then click
New Item
.
In the
Add New Item
dialog box, expand the
Visual C#
node for C#, or the
Common Items
node for Visual Basic.
Select
Data
, and then select
XSLT File
. Specify a name for the file, and then click
Add
.
In
Solution Explorer
, double-click the
Schema.xml
file to open it in the
Code Editor
.
Find the
All Items
or
All Documents
view definition in the Schema.xml file. You can identify this definition by the DefaultView attribute in the
View
element, which is set to TRUE.
By default, the
XslLink
element in the view specifies main.xsl as the XSLT file. Change this value to the name that you gave to the XSLT file that you added in step 5.
To add resources for the custom view
In
Solution Explorer
, right-click the project, point to
Add
, and then click
SharePoint Mapped Folder
.
In the
Add SharePoint Mapped Folder
dialog box, select the
{SharePointRoot}\CONFIG\Resources
folder, and then click
OK
.
In
Solution Explorer
, right-click the new
Resources
folder, point to
Add
, and then click
New Item
.
In the
Add New Item
dialog box, expand the
Visual C#
node or the
Common Items
node, select
General
, and then select
Resources File
. Enter a name for the file, and then click
Add
.
In the
Resource Editor
, enter a
name
and a
value
for the resource. The value is a string to display when the list is empty. This example specifies "EmptyListResource" as the resource name for the value "Please add information to this list ASAP!", and "WikiResource" for "For information about the contents of this list see the ".
In the
Schema.xml
file, add parameter bindings to the <ParameterBindings> section of the view. This adds the resources that you specified in the previous step.
These tags have the following formats: <ParameterBinding Name="EmptyListString" Location="Resource(Resource1,EmptyListResource)" /> and <ParameterBinding Name="TeamWiki" Location="Resource(Resource1,WikiResource)" />. In this example, "EmptyListString" and "TeamWiki" are the parameter names that can be implemented in the XSLT file, "Resource1" is the name of the resource file minus the extension, and "EmptyListResource" and "WikiResource" are the resource names that you provided in the .resx file.
To implement the resources in XSLT code
To override the default FreeForm and EmptyTemplate templates that are defined in vwstyles.xsl, import the main.xsl file into your XSLT file.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
<xsl:import href="/_layouts/xsl/main.xsl"/>
Importing main.xsl also imports vwstyles.xsl and fldtypes.xsl into your file, because by default, they are both imported into main.xsl.
Because you previously modified the XslLink element value and added parameter bindings in the Schema.xml file, the resource strings that you defined are available for use in the XSLT file.
Declare the parameters as follows.
<xsl:param name="MyEmptyListString" />
<xsl:param name="TeamWiki" />
Copy the FreeForm template into your XSLT file, and add a section that defines special rendering of the footer section in the All Items view, as follows.
<xsl:template name="Freeform">
<xsl:param name="AddNewText"/>
<xsl:param name="ID"/>
<xsl:variable name="Url">
<xsl:choose>
<xsl:when test="List/@TemplateType='119'">
<xsl:value-of select="$HttpVDir"/>/_layouts/CreateWebPage.aspx?List=<xsl:value-of select="$List"/>&RootFolder=<xsl:value-of select="$XmlDefinition/List/@RootFolder"/>
</xsl:when>
<xsl:when test="$IsDocLib">
<xsl:value-of select="$HttpVDir"/>/_layouts/Upload.aspx?List=<xsl:value-of select="$List"/>&RootFolder=<xsl:value-of select="$XmlDefinition/List/@RootFolder"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$ENCODED_FORM_NEW"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="HeroStyle">
<xsl:choose>
<xsl:when test="Toolbar[@Type='Standard']"></xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:if test="$ListRight_AddListItems = '1' and (not($InlineEdit) or $IsDocLib)">
<table id="Hero-{$WPQ}" width="100%" cellpadding="0" cellspacing="0" border="0" style="{$HeroStyle}">
<tr><td colspan="2" class="ms-partline">
<img src="/_layouts/images/blank.gif" width="1" height="1" alt="" />
</td></tr>
<tr><td class="ms-addnew" style="padding-bottom: 3px">
<span style="height:10px;width:10px;position:relative;display:inline-block;overflow:hidden;" class="s4-clust">
<img src="/_layouts/images/fgimg.png" alt="" style="left:-0px !important;top:-128px !important;" /></span>
<xsl:text disable-output-escaping="yes" ddwrt:nbsp-preserve="yes">&nbsp;</xsl:text>
<xsl:choose>
<xsl:when test="List/@TemplateType = '115'">
<a class="ms-addnew" id="{$ID}-{$WPQ}" href="{$Url}"
onclick="javascript:NewItem2(event, "{$Url}");javascript:return false;"
target="_self">
<xsl:value-of select="$AddNewText" />
</xsl:when>
<!—Define a special footer section for the custom list definition, which has 10000 as template type.-->
<xsl:when test="$XmlDefinition/List/@TemplateType ='10000'">
<a class="ms-addnew" id="{$ID}-{$WPQ}" href="{$Url}"
onclick="javascript:NewItem2(event, "{$Url}");javascript:return false;"
target="_self">
<xsl:value-of select="$AddNewText" />
<xsl:value-of select="$TeamWiki"/>
<a href="{$RootSiteUrl}/TeamWiki">Team Wiki</a>.
</xsl:when>
<xsl:otherwise>
<a class="ms-addnew" id="{$ID}"
href="{$Url}" onclick="javascript:NewItem2(event, "{$Url}");javascript:return false;"
target="_self">
<xsl:value-of select="$AddNewText" /></a>
</xsl:otherwise>
</xsl:choose>
</td></tr>
<tr><td><img src="/_layouts/images/blank.gif" width="1" height="5" alt="" /></td></tr></table>
<xsl:choose>
<xsl:when test="Toolbar[@Type='Standard']">
<script type='text/javascript'>
if (typeof(heroButtonWebPart<xsl:value-of select="$WPQ"/>) != "undefined")
<xsl:value-of select="concat(' var eleHero = document.getElementById("Hero-', $WPQ, '");')"/>
if (eleHero != null)
eleHero.style.display = "";
</script>
</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
<xsl:if test="List/@TemplateType = '115'">
<script type='text/javascript'>
if (typeof(DefaultNewButtonWebPart<xsl:value-of select="$WPQ"/>) != "undefined")
<xsl:value-of select="concat(' var eleLink = document.getElementById("', $ID, '-', $WPQ, '");')"/>
if (eleLink != null)
DefaultNewButtonWebPart<xsl:value-of select="$WPQ"/>(eleLink);
</script>
</xsl:if>
</xsl:if>
</xsl:template>
The example applies special rendering to the footer section of the view, using the XmlDefinition parameter to retrieve the TemplateType of the list definition, which is 10000. In addition, the example uses the "TeamWiki" parameter to return the "WikiResource" string, and the global "RootSiteUrl" parameter to return the root website of the site collection that contains the parent website of the list. The example assumes the existence of a Wiki library in the root website that is called "TeamWiki".
Add the following code to the XSLT file, which overrides the EmptyTemplate definition to modify the text that is displayed.
<xsl:template name="EmptyTemplate">
<td class="ms-vb" colspan="99" style="color:red;font-weight:bold">
<xsl:value-of select="$MyEmptyListString"/>
</xsl:template>
</xsl:stylesheet>
On the Build menu, click Build Solution, and then click Deploy Solution to deploy your custom list to the SharePoint Foundation site.
When you deploy your project, Visual Studio 2010 places the resource file that you create into the mapped folder that you specified (%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\CONFIG\Resources). When you create a new web application, SharePoint Foundation copies the .resx file into the \inetpub\...\App_GlobalResources folder that is created for the web application, which is where the file must be located for the resources to take effect. However, for the file to take effect in web applications that already exist when you deploy your project, you must manually copy the file into the web application’s App_GlobalResources folder.
See Also
Reference
ParameterBinding
Concepts
XsltListViewWebPart and Custom List Views
XSLT Parameter Bindings
Overview of XSLT List View Rendering System