BizTalk Utilities CV ,   Jobs ,   Code library
 
Go to the front page to continue learning about XML or select below:

Contents

ReBlogger Contents

Previous posts in .NET XML, System.XML

 
 
Page 4156 of 17664

Sharepoint DataFormWebPart overriding the SetDataSourceProperties method

Blogger : Micks Breeze Blogs - Biztalk/Sharepoint/...
All posts : All posts by Micks Breeze Blogs - Biztalk/Sharepoint/...
Category : .NET XML, System.XML
Blogged date : 2007 Dec 13

Well firstly - I've got to say this comes off the back of a great Sharepoint MVP and collegue of mine Ishai Sagi. Big THANKS Ishai!!!

Typically my experience with the DataFormWebPart has been through the eyes of Sharepoint Designer - open pages with webparts on them and looking at the XML configuration of these parts. It look pretty ugly AND very site/web specific - IDs all over the place etc etc.

Ishai the wealth of knowledge came up with this solution - by overriding the SetDataSourceProperties method, you can effectively create a datasource from anywhere!!!! Forgetting the IDs etc that cause all the pain.

I've marked the 2 important lines with (**) in the code.

Big Thanks Ishai!!! Folks he's always one to watch - lock his blog in and learn!! :)

Ishai mentioned that his code below is purely for educational purposes

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 Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using System.Data;
using System.Xml;

namespace AdvancedQueryWebPart
{
[Guid("46a8853d-415c-458e-990c-419c12fa04f5")]
public class AdvancedQueryWebPart : DataFormWebPart, IWebPart
{
public AdvancedQueryWebPart()
{
this.ExportMode = WebPartExportMode.All;
}

protected override void SetDataSourceProperties()
{
   try
   {
      // Call a custom function that returns the data you want to show as a data table
      DataTable results = GetCustomData();
      if (results.Rows.Count > 0)
      {
         // generate xml for selected items
         XmlDocument doc = new XmlDocument();
         XmlNode root = doc.AppendChild(doc.CreateElement("Rows"));
         foreach (DataRow row in results.Rows)
         {
            XmlElement rowNode = doc.CreateElement("row");
            foreach (DataColumn col in row.Table.Columns)
            {
               string val = row[col].ToString();
               XmlAttribute att = doc.CreateAttribute(col.ColumnName);
               att.Value = val;
               rowNode.Attributes.Append(att);
            }
            root.AppendChild(rowNode);
         }
         // create an XmlDatasource with the new data, and set it to cache for one second
         XmlDataSource ds = new XmlDataSource();
         ds.CacheDuration = 1;
         ds.Data = doc.InnerXml;
         // bind the web part to the xml
(**)     this.DataSource = ds;
(**)     this.DataBind(true);
       }
       else
       {
         Label noResults = new Label();
         noResults.Text = "No results were found";
         this.Controls.Add(noResults);
       }
   }
   catch (Exception ex)
   {
      Label lblError = new Label();
      lblError.Text = ex.ToString();
      this.Controls.Add(lblError);
   }
   base.SetDataSourceProperties();
}

private DataTable GetCustomData()
{
   try
   {
      SPWeb webSite = SPContext.Current.Web;
      SPSiteDataQuery query = new SPSiteDataQuery();
      //look only in document libraries
      query.Lists = "<Lists ServerTemplate=\"101\" />";
      //search for documents that have "Test" in the title
      query.Query = @"<Where><Contains><FieldRef Name=" "Title" " /><Value Type="Text" ">Test</Value></Contains></Where>";
      //bring back the title field of the documents
      query.ViewFields = @"<FieldRef Name=" "Title" " Nullable=" "TRUE" " /><FieldRef Name=" "FileLeafRef" " Nullable=" "FALSE" " />";
      DataTable items = webSite.GetSiteData(query);
      return items;
   }
   catch (Exception ex)
   {
      throw new Exception("There was a problem querying the site with the query", ex);
   }
}

}

}


Read comments or post a reply to : Sharepoint DataFormWebPart overriding the SetDataSourceProperties method
Page 4156 of 17664

Newest posts
 

    Email TopXML