Background... I am trying to create a Gauge page that i can use QueryString (http://Localhost/default.aspx?ID=xxxx) to pass an Identifer to the Gauge I have this part working. I want the gauges to display Dynamically since all my data is not being represented as 0-100 on all datasets.
I am attempting to create a radial gauge with 3 Color Range Scales (Red, Yellow, Green) and a needle. I can do it all in the Xaml just fine(not Dynamic enough) but when i attempt to intergrate the data from RIA Services I have some issues.
The Needle is being pulled from RIA Services and i am using Binding this is working.
Now for my Min Max fields on the Scale and the Ranges are where i am running into issues i need to do some math on them in order to get them
The data that i have to deal with is as follows and the customer is not willing to add a min max field to the database.
Database Field / Gauge Item
MainPage.xaml.vb
I am attempting to create a radial gauge with 3 Color Range Scales (Red, Yellow, Green) and a needle. I can do it all in the Xaml just fine(not Dynamic enough) but when i attempt to intergrate the data from RIA Services I have some issues.
The Needle is being pulled from RIA Services and i am using Binding this is working.
Now for my Min Max fields on the Scale and the Ranges are where i am running into issues i need to do some math on them in order to get them
The data that i have to deal with is as follows and the customer is not willing to add a min max field to the database.
Database Field / Gauge Item
Actual Value / Needle.Value
Tolerance Value / (Yellow.Max - Yellow.Min)
Target Value / Green.Min
With in these 3 Fields i have the math on how to figure out the other itemes needed. The Issues that i am seeing is that i can't figure out how to get these items to load on runtime of the applicaiton so i placed a button on the project with a launch event to do the gauge configuration(not acceptable to have a button). That works to a point.
The other issues it that i can ususall only get 2 of the 3 color scales to display.
MainPage.xaml
<UserControl |
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" |
xmlns:Telerik_Windows_Controls="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.Gauge" |
xmlns:Telerik_Windows_Controls_Gauges="clr-namespace:Telerik.Windows.Controls.Gauges;assembly=Telerik.Windows.Controls.Gauge" x:Class="MetricsDashboard.MainPage" |
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480" xmlns:riaControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.DomainServices" xmlns:my="clr-namespace:MetricsDashboard.Web" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"> |
<Grid> |
<Grid x:Name="LayoutRoot" Background="#FF373737"> |
<Grid x:Name="Maingrid" d:LayoutOverrides="GridBox" DataContext="{Binding ElementName=CognosMetricDomainDataSource1, Path=Data}"> |
<Grid.RowDefinitions> |
<RowDefinition /> |
<RowDefinition Height="0*" /> |
</Grid.RowDefinitions> |
<Grid.ColumnDefinitions> |
<ColumnDefinition /> |
<ColumnDefinition Width="0*" /> |
<ColumnDefinition Width="0*"/> |
<ColumnDefinition Width="0*" /> |
</Grid.ColumnDefinitions> |
<Telerik_Windows_Controls:RadGauge x:Name="radGauge" Grid.Column="0" VerticalAlignment="Top" |
Height="210" Width="210" HorizontalAlignment="Center" ToolTipService.ToolTip="{Binding MName}" > |
<Telerik_Windows_Controls_Gauges:RadialGauge> |
<Telerik_Windows_Controls_Gauges:RadialScale x:Name="RadialScale" IsInteractive="False" Min="0" Max="1000"> |
<Telerik_Windows_Controls_Gauges:RangeList d:LayoutOverrides="Width, Height"> |
<Telerik_Windows_Controls_Gauges:RadialRange x:Name="Gauge1Green" Background="#FF13FF00" BorderBrush="#7FFFFFFF" |
StartWidth="0.06" EndWidth="0.06" |
Max="{Binding ElementName=RadialScale, Path=Max}" |
Min="{Binding TargetVal}" /> |
<Telerik_Windows_Controls_Gauges:RadialRange x:Name="Gauge1Yellow" Background="#7FFFF900" BorderBrush="#7FFFFFFF" |
StartWidth="0.06" EndWidth="0.06" |
Max="{Binding TargetVal}" |
Min="{Binding TargetVal}"/> |
<Telerik_Windows_Controls_Gauges:RadialRange x:Name="Gauge1Red" Background="#7FFF0000" BorderBrush="#7FFFFFFF" |
StartWidth="0.06" EndWidth="0.06" |
Min="{Binding ElementName=RadialScale, Path=Min}"/> |
</Telerik_Windows_Controls_Gauges:RangeList> |
<Telerik_Windows_Controls_Gauges:IndicatorList Height="210" Width="210"> |
<Telerik_Windows_Controls_Gauges:Needle x:Name="Needle" IsAnimated="True" Value="{Binding ActualVal}" Cursor="Hand" /> |
</Telerik_Windows_Controls_Gauges:IndicatorList> |
</Telerik_Windows_Controls_Gauges:RadialScale> |
<Grid> |
<Grid> |
<Grid.RowDefinitions> |
<RowDefinition Height="0.60*" /> |
<RowDefinition Height="0.40*" /> |
</Grid.RowDefinitions> |
<TextBlock x:Name="txtKPIID" Grid.Row="0" Text="{Binding KpiSid}" VerticalAlignment="Top" HorizontalAlignment="Center" FontSize="14" FontFamily="Arial" Foreground="Black"></TextBlock> |
<TextBox x:Name="ValueBox" Grid.Row="1" Text="{Binding ActualVal}" VerticalAlignment="Center" d:LayoutOverrides="Width" HorizontalAlignment="Center"/> |
</Grid> |
</Grid> |
</Telerik_Windows_Controls_Gauges:RadialGauge> |
</Telerik_Windows_Controls:RadGauge> |
<Button Content="Button" Height="23" Margin="69,214,71,0" Name="Button1" VerticalAlignment="Top" MaxWidth="75" /> |
<sdk:DataGrid AutoGenerateColumns="False" Height="200" HorizontalAlignment="Stretch" ItemsSource="{Binding}" Name="CognosMetricDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" VerticalAlignment="Bottom" ColumnWidth="SizeToCells" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Visibility="Collapsed"> |
<sdk:DataGrid.Columns> |
<sdk:DataGridTextColumn x:Name="ActualValColumn" Binding="{Binding Path=ActualVal}" Header="Actual Val" Width="SizeToHeader" /> |
<sdk:DataGridTextColumn x:Name="FYTimeColumn" Binding="{Binding Path=FYTime}" Header="FYTime" Width="SizeToHeader" /> |
<sdk:DataGridTextColumn x:Name="KpiSidColumn" Binding="{Binding Path=KpiSid, Mode=OneWay}" Header="Kpi Sid" IsReadOnly="True" Width="SizeToHeader" /> |
<sdk:DataGridTextColumn x:Name="MNameColumn" Binding="{Binding Path=MName}" Header="MName" Width="SizeToHeader" /> |
<sdk:DataGridTextColumn x:Name="MonthColumn" Binding="{Binding Path=Month}" Header="Month" Width="SizeToHeader" /> |
<sdk:DataGridTextColumn x:Name="TargetValColumn" Binding="{Binding Path=TargetVal}" Header="Target Val" Width="SizeToHeader" /> |
<sdk:DataGridTextColumn x:Name="ToleranceValColumn" Binding="{Binding Path=ToleranceVal}" Header="Tolerance Val" Width="SizeToHeader" /> |
<sdk:DataGridTextColumn x:Name="ValueColumn" Binding="{Binding Path=Value}" Header="Value" Width="SizeToHeader" /> |
</sdk:DataGrid.Columns> |
</sdk:DataGrid> |
<Telerik_Windows_Controls_Gauges:Needle Grid.Column="1" HorizontalAlignment="Left" Height="68" Margin="0,0,0,77" VerticalAlignment="Bottom" Width="0"/> |
</Grid> |
<StackPanel Height="30" HorizontalAlignment="Left" Orientation="Horizontal" VerticalAlignment="Top" Margin="8,233,0,0"> |
<TextBox Name="KPInumTextBox" Width="60" Visibility="Collapsed"/> |
</StackPanel> |
</Grid> |
<riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my:CognosMetric, CreateList=true}" Height="0" Name="CognosMetricDomainDataSource1" QueryName="GetCognosMetricsByKPIIDQuery" Width="0"> |
<riaControls:DomainDataSource.DomainContext> |
<my:CognosMetricsDS /> |
</riaControls:DomainDataSource.DomainContext> |
<riaControls:DomainDataSource.QueryParameters> |
<riaControls:Parameter ParameterName="KPInum" Value="{Binding ElementName=KPInumTextBox, Path=Text}" /> |
</riaControls:DomainDataSource.QueryParameters> |
</riaControls:DomainDataSource> |
</Grid> |
</UserControl> |
Imports System.ServiceModel.DomainServices.Client |
Imports MetricsDashboard.Web |
Imports Telerik.Windows.Controls.Gauges |
Partial Public Class MainPage |
Inherits UserControl |
Public Sub New() |
InitializeComponent() |
End Sub |
Private Sub CognosMetricDomainDataSource1_LoadedData(ByVal sender As System.Object, ByVal e As System.Windows.Controls.LoadedDataEventArgs) Handles CognosMetricDomainDataSource1.LoadedData |
If e.HasError Then |
System.Windows.MessageBox.Show(e.Error.ToString, "Load Error", System.Windows.MessageBoxButton.OK) |
e.MarkErrorAsHandled() |
End If |
End Sub |
Private Sub ConfigureGauge() |
Dim strTarVal = TargetValColumn.GetCellContent(0).ToString() |
Dim strActualVal = ActualValColumn.GetCellContent(0).ToString() |
Dim strTolVal = ToleranceValColumn.GetCellContent(0).ToString() |
RadialScale.Max = strTarVal + (strTarVal * 0.3) |
RadialScale.Min = strActualVal - (strActualVal * 0.3) |
Gauge1Green.Max = strTarVal + (strActualVal * 0.3) |
Gauge1Green.Min = strTarVal |
Gauge1Yellow.Max = strTarVal |
Gauge1Yellow.Min = strTarVal - strTolVal |
Gauge1Red.Max = strTarVal - strTolVal |
Gauge1Red.Min = strTarVal - (strTarVal * 0.3) |
End Sub |
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click |
ConfigureGauge() |
End Sub |
End Class |