Tuesday, December 28, 2010

Dealing with Silverlight ChartPart

you need to add the following assembly references first!
xmlns:charting="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"

xmlns:DV="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit"
xmlns:dataprimitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data">

XAML
//Add chart control in stack panel.
charting:Chart x:Name="SubscribeReportChart" Width="362" Height="338" >

charting:Chart.LegendStyle>
Style TargetType="Control">
Setter Property="Width" Value="0"/>
Setter Property="Height" Value="0"/>
/Style>
/charting:Chart.LegendStyle>

/charting:Chart>

XAML.cs

//Global declaration
ObservableCollection gChartDataCollection;
BackgroundWorker bwViewChart = new BackgroundWorker();
//MainPage
bwViewChart.DoWork += new DoWorkEventHandler(bwViewChart_DoWork);
bwViewChart.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwViewChart_RunWorkerCompleted);

void bwViewChart_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (gChartDataCollection.Count > 0)
{
lblNoRecordSubscription.Content = "";
List(open angular)KeyValuePair(open angular)string, int>> chartDataList = new List(open angular)KeyValuePair(open angular)string, int>>();
foreach (var month in gChartDataCollection)
{
chartDataList.Add(new KeyValuePair(month.MonthName, month.Count));
}

ColumnSeries _mySeries = new ColumnSeries();
_mySeries.Title = "Subscriptions";

Style DataPointStyle = new Style(typeof(ColumnDataPoint));
DataPointStyle.Setters.Add(new Setter(ColumnDataPoint.MaxWidthProperty, 35.0));
DataPointStyle.Setters.Add(new Setter(ColumnDataPoint.BackgroundProperty, new SolidColorBrush(Color.FromArgb(255, 179, 199, 224))));
_mySeries.DataPointStyle = DataPointStyle;

_mySeries.IndependentValueBinding = new System.Windows.Data.Binding("Key");
_mySeries.DependentValueBinding = new System.Windows.Data.Binding("Value");
_mySeries.ItemsSource = chartDataList;

SubscribeReportChart.Series.Add(_mySeries);
}

void bwViewChart_DoWork(object sender, DoWorkEventArgs e)
{
ObservableCollection _suscribedChannels = new ObservableCollection();

foreach (ListItem _item in Channels.GetSubscribedChannelsByDate(gChannelID, gFromDateChart, gToDateChart))
{
SubscribeChannel page = new SubscribeChannel();
page.Month = Convert.ToDateTime(_item["Modified"]).Month;//int
_suscribedChannels.Add(page);
}

gChartDataCollection = new ObservableCollection();

foreach (var month in _suscribedChannels.Select(i => i.Month).Distinct().OrderBy(i => i))
{
ChartData page = new ChartData();
DateTime dt=new DateTime(1,month,1);
page.MonthName = dt.ToString("MMM");
page.Count = _suscribedChannels.Where(ch => ch.Month == month).Count();
gChartDataCollection.Add(page);
}
}

public class SubscribeChannel
{
public int Month { get; set; }
}
public class ChartData
{
public string MonthName { get; set; }
public int Count { get; set; }
}

Monday, December 27, 2010

Silverlight Grid

//Adding datepicker,label,button and grid to the Root grid on XAML.


Grid x:Name="LayoutRoot" Background="White" Height="476" Width="698"


Grid.ColumnDefinitions> //Grid columns
ColumnDefinition Width="198" />
ColumnDefinition Width="212" />
ColumnDefinition Width="199">
ColumnDefinition Width="66*" />
Grid.ColumnDefinitions>
Grid.RowDefinitions> //Grid Rows
RowDefinition Height="32">
RowDefinition Height="36">
RowDefinition Height="150">
RowDefinition Height="15">
RowDefinition Height="39" />
RowDefinition Height="28" />
RowDefinition Height="176*" />
Grid.RowDefinitions

sdk:DatePicker Height="23" HorizontalAlignment="Left" Name="FromDatePicker" VerticalAlignment="Top" Width="120" Grid.Row="1" Margin="78,8,0,0" />
sdk:DatePicker Height="23" HorizontalAlignment="Left" Name="ToDatePicker" VerticalAlignment="Top" Width="120" Grid.Column="1" Grid.Row="1" Margin="77,8,0,0" />
Button Content="View" Height="23" HorizontalAlignment="Left" Name="btnView" VerticalAlignment="Top" Width="75" Grid.Column="2" Grid.Row="1" Margin="50,6,0,0" Click="btnView_Click" />
sdk:DataGrid AutoGenerateColumns="False" Grid.ColumnSpan="3" Grid.Row="2" Height="138" HorizontalAlignment="Center" Name="dgrVisitedContents" VerticalAlignment="Top" Width="555" Margin="33,1,21,0" Grid.RowSpan="2" IsReadOnly="True">
sdk:DataGrid.Columns>

sdk:DataGridTextColumn Binding="{Binding ChannelName}" Header="Channel Name" Width="200"> // binding public proprties of the public class
sdk:DataGridTextColumn Binding="{Binding ContentName}" Header="Content Name" Width="200"/>
sdk:DataGridTextColumn Binding="{Binding LastVisitedDate}" Header="Last Visited Date" Width="200" />


sdk:DataGrid.Columns>
/sdk:DataGrid>


sdk:Label Height="28" HorizontalAlignment="Left" Margin="12,8,0,0" Name="lblLabelFrom" VerticalAlignment="Top" Width="61" Content="From Date" Grid.Row="1" />
sdk:Label Grid.Column="1" Height="21" HorizontalAlignment="Left" Margin="9,10,0,0" Name="lblTo" VerticalAlignment="Top" Width="62" Content="To Date" Grid.Row="1" />
StackPanel Name="StackPanelHeader" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="183,-2,0,48" Grid.RowSpan="2">
Border Background="AliceBlue" Grid.ColumnSpan="4" Height="31" HorizontalAlignment="Left" VerticalAlignment="Top" Width="610">
dataInput:Label Height="25" HorizontalAlignment="Left" Name="lblHeader" VerticalAlignment="Center" Width="140" FontWeight="Normal" Content="Visited Contents" FontSize="16" HorizontalContentAlignment="Left" Grid.ColumnSpan="2" Margin="12,5,0,0" />
/Border>

XAML.cs

ObservableCollection gHits = new ObservableCollection(), hitspersonalise;
private BackgroundWorker bw = new BackgroundWorker();//Global

bw.DoWork += new DoWorkEventHandler(bw_DoWork);//MainPage
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
if (bw.IsBusy != true)
{
bw.RunWorkerAsync();
}

void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
dgrVisitedContents.ItemsSource = hitspersonalise;
}
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
//your code here to fire query and bind ListItemCollections using foreach to observation collection
hitspersonalise.Add(new HitsInfo()
{
ChannelName = Convert.ToString(_channelNameItem["ChannelName"]),
ContentName = Convert.ToString(_contentNameItem["ContentName"]),
LastVisitedDate = Convert.ToDateTime(item["Date"]).ToString("M/dd/yyyy"),

});

}

public class HitsInfo
{
#region public properties
public string ChannelName { get; set; }
public string ContentName { get; set; }
public string LastVisitedDate { get; set; }
#endregion
}