LINQ to XML in SILVERLIGHT 3.0

Objective

This article will explain how to use LINQ to XML to read data from a XML file and bind that to SILVERLIGHT 3.0 Data Grid. XML file will be read in a WCF service and WCF service will return a List to be bind in a Grid.

Step 1

Create a SILVERLIGHT application. Select hosting in WEB Application project option.

Step 2: Add XML file in Web project.

If you have any existing XML file add that by selecting Add Existing Item option by right clicking on WEB (SilverLightApplication1.Web) project else select add new item option and select XML file from DATA tab. Copy paste the below XML file in your newly created XML file. Give any name of your choice to XML file. Name I am giving is Books.Xml.

Your XML file in Web Application project must look like.

Books.XML

<?xml
version=1.0?>
<catalog>

<book
id=bk101>

<author>Gambardella, Matthew</author>

<title>XML Developer’s Guide</title>

<genre>Computer</genre>

<price>44.95</price>

<publish_date>2000-10-01</publish_date>

<description>

An in-depth look at creating applications

with XML.

</description>

</book>

<book
id=bk102>

<author>Ralls, Kim</author>

<title>Midnight Rain</title>

<genre>Fantasy</genre>

<price>5.95</price>

<publish_date>2000-12-16</publish_date>

<description>

A former architect battles corporate zombies,

an evil sorceress, and her own childhood to become queen

of the world.

</description>

</book>

<book
id=bk103>

<author>Corets, Eva</author>

<title>Maeve Ascendant</title>

<genre>Fantasy</genre>

<price>5.95</price>

<publish_date>2000-11-17</publish_date>

<description>

After the collapse of a nanotechnology

society in England, the young survivors lay the

foundation for a new society.

</description>

</book>

<book
id=bk104>

<author>Corets, Eva</author>

<title>Oberon’s Legacy</title>

<genre>Fantasy</genre>

<price>5.95</price>

<publish_date>2001-03-10</publish_date>

<description>

In post-apocalypse England, the mysterious

agent known only as Oberon helps to create a new life

for the inhabitants of London. Sequel to Maeve

Ascendant.

</description>

</book>

<book
id=bk105>

<author>Corets, Eva</author>

<title>The Sundered Grail</title>

<genre>Fantasy</genre>

<price>5.95</price>

<publish_date>2001-09-10</publish_date>

<description>

The two daughters of Maeve, half-sisters,

battle one another for control of England. Sequel to

Oberon’s Legacy.

</description>

</book>

<book
id=bk106>

<author>Randall, Cynthia</author>

<title>Lover Birds</title>

<genre>Romance</genre>

<price>4.95</price>

<publish_date>2000-09-02</publish_date>

<description>

When Carla meets Paul at an ornithology

conference, tempers fly as feathers get ruffled.

</description>

</book>

<book
id=bk107>

<author>Thurman, Paula</author>

<title>Splish Splash</title>

<genre>Romance</genre>

<price>4.95</price>

<publish_date>2000-11-02</publish_date>

<description>

A deep sea diver finds true love twenty

thousand leagues beneath the sea.

</description>

</book>

<book
id=bk108>

<author>Knorr, Stefan</author>

<title>Creepy Crawlies</title>

<genre>Horror</genre>

<price>4.95</price>

<publish_date>2000-12-06</publish_date>

<description>

An anthology of horror stories about roaches,

centipedes, scorpions and other insects.

</description>

</book>

<book
id=bk109>

<author>Kress, Peter</author>

<title>Paradox Lost</title>

<genre>Science Fiction</genre>

<price>6.95</price>

<publish_date>2000-11-02</publish_date>

<description>

After an inadvertant trip through a Heisenberg

Uncertainty Device, James Salway discovers the problems

of being quantum.

</description>

</book>

<book
id=bk110>

<author>O’Brien, Tim</author>

<title>Microsoft .NET: The Programming Bible</title>

<genre>Computer</genre>

<price>36.95</price>

<publish_date>2000-12-09</publish_date>

<description>

Microsoft’s .NET initiative is explored in

detail in this deep programmer’s reference.

</description>

</book>

<book
id=bk111>

<author>O’Brien, Tim</author>

<title>MSXML3: A Comprehensive Guide</title>

<genre>Computer</genre>

<price>36.95</price>

<publish_date>2000-12-01</publish_date>

<description>

The Microsoft MSXML3 parser is covered in

detail, with attention to XML DOM interfaces, XSLT processing,

SAX and more.

</description>

</book>

<book
id=bk112>

<author>Galos, Mike</author>

<title>Visual Studio 7: A Comprehensive Guide</title>

<genre>Computer</genre>

<price>49.95</price>

<publish_date>2001-04-16</publish_date>

<description>

Microsoft Visual Studio 7 is explored in depth,

looking at how Visual Basic, Visual C++, C#, and ASP+ are

integrated into a comprehensive development

environment.

</description>

</book>

</catalog>

Step 2: Creating WCF service

Right click on Web Project and add WCF service from Web tab. Give any name of your choice, I am giving name here MyService.


 Creating Data Contract
This class will get serialized at client side.

Creating Service Contract

IMyService.cs

namespace SilverlightApplication1.Web{
[ServiceContract]

public interface IMyService

{

[OperationContract]

List<BooksDTO> GetBookDetails();

 }
}

Creating Service Implementation

MyService.svc.cs

using System;
using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.Text;

using System.Web;

using System.Xml.Linq;

namespace SilverlightApplication1.Web{
public class MyService : IMyService
{
public List<BooksDTO> GetBookDetails()
{

 XDocument xmlDocument = XDocument.Load(@”c:\\Books.XML”);
var books = from r in xmlDocument.Descendants(“book”)
select new BooksDTO
{
Author = r.Element(“author”).Value,

Title = r.Element(“title”).Value,Genere = r.Element(“genre”).Value,

Price = r.Element(“price”).Value,

PublishDate = r.Element(“publish_date”).Value,

Description = r.Element(“description”).Value,

};
return books.ToList();

 }

}

}

Few points

  1. Using namespace System,.XML.Linq to use LINQ to XML features.
  2. Load method of XDocument class is being used to load XML document.
  3. Searching for all the descendents in XML document for the element Book. And retrieving all the child elements value.
  4. Service is returning List of BooksDTO class.

Compile the web project and after successfully compilation right click on service and view in browser.

Step 3: Consuming in SILVERLIGHT client

  1. Add Service Reference.
  2. While adding service reference, select advanced tab and change return type from Array to List.
  3. Add Data Grid on XAML. Give any name. I am giving name here MyGrid.
  4. On page load simply bind the result returning from service to Data Grid.
  5. Make sure your startup project is SilverLightApplication1.Web and startup page is SilverLightApplicatio1Testpage.aspx . Else you might yield with Cross domain problem.

     MainPage.Xaml

<UserControl xmlns:my=”clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data”
x:Class=”SilverlightApplication1.MainPage”

xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation&#8221;


xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml&#8221;


xmlns:d=”http://schemas.microsoft.com/expression/blend/2008&#8243;


xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006&#8243;


mc:Ignorable=”d”


d:DesignHeight=”300″ d:DesignWidth=”400″>


<Grid x:Name=”LayoutRoot” Background=”White”>


<my:DataGrid x:Name=”myGrid” AutoGenerateColumns=”True” Background=”Azure” ></my:DataGrid>


</Grid>

</UserControl>


 

 

MainPage.Xaml.CS

using System;
using System.Collections.Generic;

using System.Linq;

using System.Net;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Shapes;

using SilverlightApplication1.ServiceReference1;

namespace SilverlightApplication1

{


public artial class MainPage : UserControl

{

public MainPage()

{

InitializeComponent();


MyServiceClient proxy = new MyServiceClient();

proxy.GetBookDetailsCompleted += new EventHandler<GetBookDetailsCompletedEventArgs>(proxy_GetBookDetailsCompleted);

proxy.GetBookDetailsAsync();}

 void proxy_GetBookDetailsCompleted(object sender, GetBookDetailsCompletedEventArgs e)
{
myGrid.ItemsSource = e.Result;
}}}

Output


 Conclusion
I have explained how to return data from XML file using LINQ to XML and bind to SILVERLIGHT data grid. In next article I will show other CRUD operations. Thanks for reading.

Seven quick points in Understanding SharePoint 2007 list definition

 Objective
This article will give basic 7 theatrical points on SharePoint List definition.

  1. When we create a new site in SharePoint, it gets created as instance of SharePoint Site Definition. Each instance of Site Definition is having List Definitions. So when we create a list in SharePoint site, it gets created as instance of List Definition of the site. 
  2. Each list gets its definition from the two files. These files are applied globally to the site.

    Two files are as below,

  3. Each List folder is having 5 files. They are as follows

    These files can be found at 

    Local_Drive:\Program Files\Common Files\Microsoft Shared\web server extensions\60\TEMPLATE\Locale_ID\Site_Definition\LISTS
    directory

  4. All the three XML files for a list use CAML language to define how list instance should be created.
  5. Never modify content of FLDTYPES.XML.
    Because wrong updating or modification in this file can break the entire site definition for particular front end server.
  6. All ASPX page of a list item contains same Page Directive, Meta Data, Script, and Server controls.
  7. Each ASPX page contains a table with three rows.

TOP Navigation

Title

Left Navigation

Content

 

In next articles; I will show how to customize above four parts of a SharePoint List form. Thanks for reading.