Hello,
I am trying to setup a data drill down simiar to the provided example. But I am facing the problem that the ItemToolTipOpening event is not fired when I place the mouse on a chart point.
Here is the code that I am using:
I am custom classes which are connected via SeriesMapping.
Best regards,
Markus Demmler
I am trying to setup a data drill down simiar to the provided example. But I am facing the problem that the ItemToolTipOpening event is not fired when I place the mouse on a chart point.
Here is the code that I am using:
using System; |
using System.Collections.Generic; |
using System.Linq; |
using System.Text; |
using System.Windows; |
using System.Windows.Controls; |
using System.Windows.Data; |
using System.Windows.Documents; |
using System.Windows.Input; |
using System.Windows.Media; |
using System.Windows.Media.Imaging; |
using System.Windows.Shapes; |
using Telerik.Windows.Controls.Charting; |
using AppointmentScheduler; |
using Telerik.Windows.Data; |
using System.Globalization; |
using Telerik.Windows.Controls; |
namespace AppointmentSchedulerUI |
{ |
/// <summary> |
/// Interaction logic for ChartWorkingHours.xaml |
/// </summary> |
public partial class ChartWorkingHours : Window |
{ |
private AppointmentScheduler.AppointmentScheduler m_AppointmentScheduler; |
private Dictionary<string, Employee> m_Employees; |
public ChartWorkingHours(Dictionary<string, Employee> employees, AppointmentScheduler.AppointmentScheduler appointmentScheduler) |
{ |
m_AppointmentScheduler = appointmentScheduler; |
m_Employees = employees; |
InitializeComponent(); |
CountriesBox.ItemsSource = employees.Values; |
m_CB_Year.ItemsSource = new int[]{2009, 2010, 2011, 2012}; |
List<string> monthNames = new List<string>(); |
monthNames.Add("Komplettes Jahr"); |
for (int i=1; i<=12; i++) |
monthNames.Add(CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(i)); |
m_CB_Month.ItemsSource = monthNames; |
m_RadChart.DefaultView.ChartLegend.Header = ""; |
m_RadChart.DefaultView.ChartLegendPosition = Dock.Bottom; |
SeriesMapping seriesMapping1 = new SeriesMapping(); |
seriesMapping1.LegendLabel = "Abgerechnete Arbeitsstunden"; |
seriesMapping1.SeriesDefinition = new BarSeriesDefinition(); |
ItemMapping itemMapping1 = new ItemMapping(); |
itemMapping1.DataPointMember = DataPointMember.YValue; |
itemMapping1.FieldName = "WorkedHours"; |
ItemMapping itemMapping2 = new ItemMapping(); |
itemMapping2.DataPointMember = DataPointMember.XCategory; |
itemMapping2.FieldName = "ShortName"; |
seriesMapping1.ItemMappings.Add(itemMapping1); |
seriesMapping1.ItemMappings.Add(itemMapping2); |
m_RadChart.SeriesMappings.Add(seriesMapping1); |
SeriesMapping seriesMapping2= new SeriesMapping(); |
seriesMapping2.LegendLabel = "Bezahlte Arbeitsstunden"; |
seriesMapping2.SeriesDefinition = new BarSeriesDefinition(); |
ItemMapping itemMapping3 = new ItemMapping(); |
itemMapping3.DataPointMember = DataPointMember.YValue; |
itemMapping3.FieldName = "PaidHours"; |
ItemMapping itemMapping4 = new ItemMapping(); |
itemMapping4.DataPointMember = DataPointMember.XCategory; |
itemMapping4.FieldName = "ShortName"; |
seriesMapping2.ItemMappings.Add(itemMapping3); |
seriesMapping2.ItemMappings.Add(itemMapping4); |
m_RadChart.SeriesMappings.Add(seriesMapping2); |
m_CB_Year.SelectedItem = DateTime.Now.Year; |
m_CB_Month.SelectedIndex = 0; |
m_CB_Year.SelectionChanged +=new SelectionChangedEventHandler(TimeSpanModified); |
m_CB_Month.SelectionChanged += new SelectionChangedEventHandler(TimeSpanModified); |
m_RadChart.DefaultView.ChartArea.ItemToolTipOpening += this.ChartItemToolTipOpening; |
UpdateData(); |
} |
private void ChartItemToolTipOpening(ItemToolTip2D tooltip, ItemToolTipEventArgs args) |
{ |
RadChart chart = new RadChart(); |
chart.Height = 200; |
chart.Width = 300; |
chart.DefaultView.ChartLegend.Visibility = System.Windows.Visibility.Collapsed; |
chart.DefaultView.ChartArea.AxisX.LayoutMode = AxisLayoutMode.Inside; |
string axisItemLabel = m_RadChart.DefaultView.ChartArea.AxisX.TickPoints[args.ItemIndex].Label; |
chart.DefaultView.ChartTitle.Content = string.Format("Quarterly Preview: {0}", axisItemLabel); |
chart.DefaultView.ChartArea.AxisY.DefaultLabelFormat = "C"; |
DataSeries series = new DataSeries(); |
series.Definition = new LineSeriesDefinition(); |
series.Definition.ShowItemLabels = false; |
//SeriesExtensions.FillWithSampleData(series, 4, (int)args.DataPoint.YValue); |
string[] quarters = new string[] { "Q1", "Q2", "Q3", "Q4" }; |
for (int i = 0; i < chart.DefaultView.ChartArea.AxisX.TickPoints.Count; i++) |
series[i].XCategory = quarters[i]; |
//for (int i = 0; i < series.Count; i++) |
// quarterlyRevenues[i] = series[i].YValue; |
chart.DefaultView.ChartArea.DataSeries.Add(series); |
tooltip.Content = chart; |
} |
private void UpdateData() |
{ |
int selectedYear = (int)m_CB_Year.SelectedItem; |
string selectedMonthString = (string)m_CB_Month.SelectedItem; |
bool wholeYear = false; |
int selectedMonth = 0; |
if (selectedMonthString == "Komplettes Jahr") |
wholeYear = true; |
else |
selectedMonth = DateTime.ParseExact(selectedMonthString, "MMMM", CultureInfo.CurrentCulture).Month; |
DateTime startTime; |
DateTime endTime; |
if (wholeYear) |
{ |
startTime = new DateTime(selectedYear, 1, 1); |
endTime = new DateTime(selectedYear + 1, 1, 1); |
} |
else |
{ |
startTime = new DateTime(selectedYear, selectedMonth, 1); |
endTime = new DateTime(selectedYear, selectedMonth, 1).AddMonths(1); |
} |
List<ChartData> chartData = new List<ChartData>(); |
foreach (Employee emp in m_Employees.Values) |
{ |
double workedHours = m_AppointmentScheduler.GetWorkedHours(startTime, endTime, emp); |
double paidHours = m_AppointmentScheduler.GetPaidHours(startTime, endTime, emp); |
chartData.Add(new ChartData(emp.FirstName, emp.LastName, workedHours, paidHours)); |
} |
m_RadChart.ItemsSource = chartData; |
} |
private void CheckBox_Checked(object sender, RoutedEventArgs e) |
{ |
CheckBox sourceCheckbox = e.OriginalSource as CheckBox; |
Queue<ChartFilterDescriptor> filtersToRemove = new Queue<ChartFilterDescriptor>(); |
foreach (ChartFilterDescriptor descriptor in m_RadChart.FilterDescriptors) |
{ |
if (descriptor.Value.Equals(sourceCheckbox.Content)) |
filtersToRemove.Enqueue(descriptor); |
} |
foreach (ChartFilterDescriptor descriptor in filtersToRemove) |
m_RadChart.FilterDescriptors.Remove(descriptor); |
} |
private void CheckBox_Unchecked(object sender, RoutedEventArgs e) |
{ |
CheckBox sourceCheckbox = e.OriginalSource as CheckBox; |
m_RadChart.FilterDescriptors.Add(new ChartFilterDescriptor("FullName", typeof(string), FilterOperator.IsNotEqualTo, sourceCheckbox.Content)); |
} |
private void TimeSpanModified(object sender, SelectionChangedEventArgs e) |
{ |
UpdateData(); |
} |
} |
} |
I am custom classes which are connected via SeriesMapping.
Best regards,
Markus Demmler