Using linq to xml binding in silverlight datagrid VB.NET
Step 1) Create Silverlight Project using C#.NET
Step 2) Add a datagrid to Grid/canvas/statckpanel layout Here Grid Layout
<Grid x:Name="LayoutRoot" Background="red">
<sdk:DataGrid
x:Name="datagrid4"
AutoGenerateColumns="False"
ItemsSource="{Binding}"
Grid.Column="01"
Grid.Row="2"
HorizontalAlignment="Left"
Height="150"
VerticalAlignment="Top"
Width="330"
GridLinesVisibility="All"
Margin="0,0,-180,0"><sdk:DataGrid.Columns>
<sdk:DataGridTextColumn
Foreground="Red" Visibility="Visible"
Binding="{Binding Path=ProductName}"
Header="Prodcutname">
</sdk:DataGridTextColumn>
<sdk:DataGridTextColumn
Binding="{Binding Path=Quanity}"
Header="Quantity">
</sdk:DataGridTextColumn>
<sdk:DataGridTextColumn
Binding="{Binding Path=UnitPrice}"
Header="UnitPrice">
</sdk:DataGridTextColumn>
<sdk:DataGridTextColumn
Binding="{Binding Path=Total}"
Header="Total Amount">
</sdk:DataGridTextColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
Step 3) For this example I used SalesOrder.xml shown below
Note: Add SalesOrder.xml to ClientBin Directory.
<?xml version="1.0" encoding="utf-8" ?>
<HeaderLines>
<SalesOrder>
<Header Date="17-02-04" Type="Quote">
<SellTo CountryRegion="GB">
<Name>The Cannon Group PLC</Name>
<Address>192 Market Square</Address>
<City>Birmingham</City>
<Zip>B27 4KT</Zip>
</SellTo>
<BillTo CountryRegion="GB">
<Name>The Cannon Group PLC</Name>
<Address>192 Market Square</Address>
<City>Birmingham</City>
<Zip>B27 4KT</Zip>
</BillTo>
<Lines>
<Item PartNum="LS-150">
<ProductName>Loudspeaker, Cherry, 150W</ProductName>
<Quantity>8</Quantity>
<UnitPrice>12900</UnitPrice>
<ShipmentDate />
<Comment>Confirm the voltage is 75W</Comment>
</Item>
<Item PartNum="LS-MAN-10">
<ProductName>Manual for Loudspeakers</ProductName>
<Quantity>20</Quantity>
<UnitPrice>100</UnitPrice>
<ShipmentDate />
<Comment />
</Item>
<Item PartNum="LS-2">
<ProductName>Cables for Loudspeakers</ProductName>
<Quantity>10</Quantity>
<UnitPrice>2100</UnitPrice>
<ShipmentDate />
<Comment />
</Item>
</Lines>
<Contact>Mr. Andy Toal</Contact>
<Terms>14 days</Terms>
</Header>
</SalesOrder>
</HeaderLines>
Step 4) Add System.Xml.Linq to the project
Step 5) Add a Public class Equivalent to Elements you are going to fetch from XML.
in this case 3 elements 1 compute element.
note: if not public day may not be visible.
public Class Item
Public ReadOnly Property ProductName() As String
Get
}
End Get
End Property
Public ReadOnly Property Quanity() As Int32
Get
}
End Get
End Property
Public ReadOnly Property UnitPrice() As Double
Get
}
End Get
End Property
Public ReadOnly Property Total() As Double
Get
}
End Get
End Property
'this is compute element.
End Class
Step 6) Binding LINQ To XML to Datagrid in Silverlight
Private Sub LoadXml()
Dim client As WebClient = New WebClient()
client.OpenReadCompleted += client_OpenReadCompleted
client.OpenReadAsync(New Uri("SalesOrder.xml",UriKind.Relative))
End Sub
Private Sub client_OpenReadCompleted(ByVal sender As Object, ByVal e As OpenReadCompletedEventArgs)
Try
Dim doc As XDocument = XDocument.Load(e.Result)
If doc Is Nothing Then
MessageBox.Show("doc is null")
End If
var query = from ele Function doc.Descendants(ByVal"Item") As in
ProductName = ele.Element("ProductName").Value,
Quanity = Convert.ToInt32(ele.Element("Quantity").Value),
UnitPrice = Convert.ToDouble(ele.Element("UnitPrice").Value),
Total = Convert.ToInt32(ele.Element("Quantity").Value)*
Convert.ToDouble(ele.Element("UnitPrice").Value)
'Total is compute column.
End Function
'LINQ to XML result binding it to Silverlight DataGrid.
datagrid4.ItemsSource = query
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Step7) LINQ TO XML in Silverlight call LoadXml on PageLoad
Private Function Page1() As Public
InitializeComponent()
LoadXml()
End Function
Step 8) Run the Application

No comments:
Post a Comment