.NET Tutorials, Forums, Interview Questions And Answers
Welcome :Guest
 
Sign In
Register
 
Win Surprise Gifts!!!
Congratulations!!!


Top 5 Contributors of the Month
david stephan

Home >> Articles >> Silverlight >> Post New Resource Bookmark and Share   

 Subscribe to Articles

LINQ to XML in Silverlight Tutorial

Posted By:Dhananjay Kumar       Posted Date: March 07, 2010    Points: 25    Category: Silverlight    URL: http://www.dotnetspark.com  

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.
 

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. 


1.gif 


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 




 
   Gambardella, Matthew
   XML Developer's Guide
   Computer
   44.95
   2000-10-01
   
     An in-depth look at creating applications with XML.
   
 
 
   Ralls, Kim
   Midnight Rain
   Fantasy
   5.95
   2000-12-16
   
     A former architect battles corporate zombies,
     an evil sorceress, and her own childhood to become queen
     of the world.
   
 
 .....
 .....
 .....


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.


2.gif 


Creating Data Contract 


This class will get serialized at client side. 
[DataContract]
   public class BooksDTO
   {
   [DataMember]
       public string Id { get; set; }
   [DataMember]
       public string Author { get; set; }
   [DataMember]
       public string Title { get; set; }
   [DataMember]
       public string Genere { get; set; }
   [DataMember]
       public string Price { get; set; }
   [DataMember]
       public string PublishDate { get; set; }
   [DataMember]
       public string Description { get; set; }
 }
Creating Service Contract 

IMyService.cs


namespace SilverlightApplication1.Web
{
   [ServiceContract]
   public interface IMyService
   {
       [OperationContract]
       List 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 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 start up project is SilverLightApplication1.Web and startup page is SilverLightApplicatio1Testpage.aspx . Else you might yield with Cross domain problem. 

MainPage.Xaml



   
              
   


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 partial class MainPage : UserControl
   {
       public MainPage()
       {
           InitializeComponent();
           MyServiceClient proxy = new MyServiceClient();
           proxy.GetBookDetailsCompleted += new EventHandler(proxy_GetBookDetailsCompleted);
           proxy.GetBookDetailsAsync();
       }
       void proxy_GetBookDetailsCompleted(object sender, GetBookDetailsCompletedEventArgs e)
       {
           myGrid.ItemsSource = e.Result;
       }
   }
}


Output 


 3.gif


Conclusion 


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

 Subscribe to Articles

     

Further Readings:

Responses

No response found. Be the first to respond this post

Post Comment

You must Sign In To post reply
Find More Articles on C#, ASP.Net, Vb.Net, SQL Server and more Here

Hall of Fame    Twitter   Terms of Service    Privacy Policy    Contact Us    Archives   Tell A Friend