views:

1054

answers:

2

I have developed a list definition project and created a custom view aspx page to be the default view of the list. I would now like to add a custom webpart to be displayed in the custom view aspx page. Any ideas of how it can be done?

+2  A: 

You can use a feature receiver and manage the addition of web parts during feature activation. Here is a bit of a stub to help get you started.

In the feature activated method call code similar to the following:

        // Add web parts to the .aspx page that was provisioned
        SPFile page = site.GetFile(<<page url>>);

        Hashtable hashWebPartsOnPage = new Hashtable();

        using (SPLimitedWebPartManager mgr = page.GetLimitedWebPartManager(PersonalizationScope.Shared))
        {
            try
            {
                // First, let's clear the existing web parts off of the form
                foreach (System.Web.UI.WebControls.WebParts.WebPart webPart in mgr.WebParts)
                {
                    hashWebPartsOnPage.Add(webPart.ID, webPart);
                }

                foreach (string webPartName in hashWebPartsOnPage.Keys)
                {
                    System.Web.UI.WebControls.WebParts.WebPart webPart = hashWebPartsOnPage[webPartName] as System.Web.UI.WebControls.WebParts.WebPart;
                    mgr.DeleteWebPart(webPart);
                }

                // Add Part to the proper Zone
                MyWebPart myWebPart = new MyWebPart();
                //set web part properties
                mgr.AddWebPart(myWebPart, "FullPage", 1);
            }
            finally
            {
                mgr.Web.Dispose();
            }

        }
        page.Update();
Pete Skelly
A: 

Well i would like to access the list definition view page which i don't think will be accessible using the above site.GetFile() method. Any other options you think we can use to achieve it. I have tried the following steps:

  1. Copy the OOB “ViewPage.aspx” and place it in the same folder as “CustomViewPage.aspx”

  2. Create the custom web part which shows the items of the view with your custom approach.

  3. Create a feature to provision the “CustomViewpage.aspx” along with your custom web part.

  4. Create a custom list definition. In the schema.xml file of the definition for all the views mention the “SetupPath” to refer your “CustomViewPage.aspx”. With this step all the views mentioned in the list definition will use the “CustomViewPage.aspx” to create the view pages and as well all the views which you create after the creation of the list will use the “customViewPage.aspx” as the base page to create the view pages.

Step 1:

Just copy the OOB “ViewPage.aspx” and place it in the C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\Pages folder as “CustomViewPage.aspx”

Step 2:

Create the custom web part which shows the items of the view with your custom approach. Basically use the GetViewfromUrl(“Lists//”) method to get the view and then retrieve the items in the web part. The code snippet for the custom web part looks like follows :

SPList list = SPContext.Current.List;

String strViewName =

SPView view = SPContext.Current.Web.GetViewFromUrl("Lists/list/ "+strViewName);

SPListItemCollection listItems = list.GetItems(view);

. .

.

.

After getting the list items then do your custom approach of displaying the items.

Build the web part DLL and place it in the GAC.

Step 3:

Create a feature to provision the “CustomViewPage.aspx” along with your custom web part. By activating this feature the “Customviewpage.aspx” will be embedded with your custom web part. The elements manifest file content looks like follows :

<File Url="Pages/CustomViewPage.aspx" Type="Ghostable">

  <AllUsersWebPart WebPartZoneID="Main" WebPartOrder="1">

    <![CDATA[

               <WebPart xmlns="http://schemas.microsoft.com/WebPart/v2"&gt;

                    <Assembly>CustomWebpartforView, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e3483ddc8b0d437a</Assembly>

                    <TypeName> CustomWebpartforView.MyCustomview</TypeName>

                    <FrameType>None</FrameType>

                                            <IsVisible>true</IsVisible>

                    <Title>Custom Web part for View</Title>                                 

               </WebPart>

               ]]>

  </AllUsersWebPart>

</File>

This step gives me error for the source file path which i modified by giving the Path attribute in the File Tag

Step 4:

Now the base custom view page is available along with the web part. Now how to integrate the custom view page with the list definition. Create a custom List definition and for all the views defined in the schema mention the “SetupPath” to use the “CustomViewPage.aspx”. Now the custom view page will be used as the base view page for all the views defined in the list definition and as well the views created later also will be using the “CustomViewpage.aspx” as the base page. The sample snippet for declaring the views inside the schema.xml is as follows :

Install and activate the feature of your custom list definition.

Now with all these steps, when you create a list based on this custom list definition then all the views created will be using the “CustomViewPage.aspx” to create the view pages and your custom web part will be rendered instead of the OOB dataformwebpart. The views which you will be creating after the creation of the List (Through UI, Through Object Model) will also use the “CustomViewpage.aspx” as the base page to create view pages.

For some reason i am still unable to see the CustomViewPage.aspx with my custom webpart. Am i missing somthing or there is something missing in this article.