Hi all,
I´ve made a PivotGrid with Chart integration like the example on the demo page.
My output is a little bit different as the demo. See attached file. As you can see in the picture the chart was generated twice.
Do you know why?
Here is my code aspx:
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage/BdVNet.Master" AutoEventWireup="true" CodeBehind="Telefondaten.aspx.cs" Inherits="BdVNet.Content.Reporting.Telefondaten" %><asp:Content ID="ReportTelefonContent" ContentPlaceHolderID="BdVMasterContentPlaceHolder" runat="server"> <telerik:RadAjaxManagerProxy ID="ReportTelefonAjaxManagerProxy" runat="server"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="ReportTelefonPivotGrid"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="ReportTelefonPivotGrid" /> <telerik:AjaxUpdatedControl ControlID="A1HtmlChart" /> </UpdatedControls> </telerik:AjaxSetting> <telerik:AjaxSetting AjaxControlID="ReportTelefonZeitenPivotGrid"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="ReportTelefonZeitenPivotGrid" /> <telerik:AjaxUpdatedControl ControlID="A2HtmlChart" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> </telerik:RadAjaxManagerProxy> <div class="box"> <telerik:RadTabStrip ID="ReportTelefonTabStrip" runat="server" MultiPageID="ReportTelefonMultiPage" SelectedIndex="0" Enabled="true" RenderMode="<%$ Resources:Einstellungen, RenderMode %>"> <Tabs> <telerik:RadTab runat="server" Text="Auswertung 1" Selected="true" /> <telerik:RadTab runat="server" Text="Auswertung 2" /> </Tabs> </telerik:RadTabStrip> <telerik:RadMultiPage ID="ReportTelefonMultiPage" runat="server" SelectedIndex="0" Enabled="true" RenderMode="<%$ Resources:Einstellungen, RenderMode %>"> <telerik:RadPageView ID="ReportTelefonA1PageView" runat="server"> <telerik:RadPivotGrid ID="ReportTelefonPivotGrid" runat="server" OnNeedDataSource="ReportTelefonPivotGrid_NeedDataSource" ShowDataHeaderZone="false" ShowFilterHeaderZone="false" TotalsSettings-ColumnGrandTotalsPosition="None" Culture="de-DE" RenderMode="<%$ Resources:Einstellungen, RenderMode %>" ColumnGroupsDefaultExpanded="false" OnCellDataBound="ReportTelefonPivotGrid_CellDataBound" EnableConfigurationPanel="false"> <Fields> <telerik:PivotGridRowField DataField="MitarbeiterDIMENSION_LONG" Caption="Abteilung" CellStyle-Width="150" ZoneIndex="0" /> <telerik:PivotGridRowField DataField="Name" Caption="Mitarbeiter" CellStyle-Width="150" /> <telerik:PivotGridColumnField DataField="Jahr" Caption="Jahr" /> <telerik:PivotGridColumnField DataField="Monat" Caption="Monat" /> <telerik:PivotGridColumnField DataField="Art" Caption="Art" /> <telerik:PivotGridAggregateField DataField="Dauer" DataFormatString="{0:N0}" Aggregate="Count"> <HeaderCellTemplate> Anzahl </HeaderCellTemplate> </telerik:PivotGridAggregateField> <telerik:PivotGridAggregateField DataField="DauerSek" DataFormatString="{0:N0}"> <HeaderCellTemplate> Dauer </HeaderCellTemplate> <CellTemplate> <%# (Convert.ToInt64(Container.DataItem) == 0) ? "" : string.Format("{0:d2}:{1:d2}:{2:d2}", (Convert.ToInt64(Container.DataItem)/3600) , (Convert.ToInt64(Container.DataItem)%3600)/60 , (Convert.ToInt64(Container.DataItem)%3600)%60) %> </CellTemplate> <RowTotalCellTemplate> <%# (Convert.ToInt64(Container.DataItem) == 0) ? "" : string.Format("{0:d2}:{1:d2}:{2:d2}", (Convert.ToInt64(Container.DataItem)/3600) , (Convert.ToInt64(Container.DataItem)%3600)/60 , (Convert.ToInt64(Container.DataItem)%3600)%60) %> </RowTotalCellTemplate> <RowGrandTotalCellTemplate> <%# (Convert.ToInt64(Container.DataItem) == 0) ? "" : string.Format("{0:d2}:{1:d2}:{2:d2}", (Convert.ToInt64(Container.DataItem)/3600) , (Convert.ToInt64(Container.DataItem)%3600)/60 , (Convert.ToInt64(Container.DataItem)%3600)%60) %> </RowGrandTotalCellTemplate> <ColumnTotalCellTemplate> <%# (Convert.ToInt64(Container.DataItem) == 0) ? "" : string.Format("{0:d2}:{1:d2}:{2:d2}", (Convert.ToInt64(Container.DataItem)/3600) , (Convert.ToInt64(Container.DataItem)%3600)/60 , (Convert.ToInt64(Container.DataItem)%3600)%60) %> </ColumnTotalCellTemplate> <ColumnGrandTotalCellTemplate> <%# (Convert.ToInt64(Container.DataItem) == 0) ? "" : string.Format("{0:d2}:{1:d2}:{2:d2}", (Convert.ToInt64(Container.DataItem)/3600) , (Convert.ToInt64(Container.DataItem)%3600)/60 , (Convert.ToInt64(Container.DataItem)%3600)%60) %> </ColumnGrandTotalCellTemplate> </telerik:PivotGridAggregateField> </Fields> <ConfigurationPanelSettings Position="Left" DefaultDeferedLayoutUpdate="true" /> </telerik:RadPivotGrid> <telerik:RadHtmlChart ID="A1HtmlChart" runat="server" RenderMode="<%$ Resources:Einstellungen, RenderMode %>" Legend-Appearance-Position="Top" PlotArea-YAxis-LabelsAppearance-DataFormatString="N0" PlotArea-XAxis-LabelsAppearance-RotationAngle="45"> <Appearance> <FillStyle BackgroundColor="Transparent" /> </Appearance> <ChartTitle Text="Telefondaten"> <Appearance Align="Center" BackgroundColor="Transparent" Position="Top" /> </ChartTitle> </telerik:RadHtmlChart> </telerik:RadPageView> <telerik:RadPageView ID="ReportTelefonA2PageView" runat="server"> <telerik:RadPivotGrid ID="ReportTelefonZeitenPivotGrid" runat="server" OnNeedDataSource="ReportTelefonZeitenPivotGrid_NeedDataSource" ShowDataHeaderZone="false" ShowFilterHeaderZone="false" TotalsSettings-ColumnGrandTotalsPosition="None" Culture="de-DE" RenderMode="<%$ Resources:Einstellungen, RenderMode %>" ColumnGroupsDefaultExpanded="false" OnCellDataBound="ReportTelefonZeitenPivotGrid_CellDataBound" EnableConfigurationPanel="false"> <Fields> <telerik:PivotGridRowField DataField="Wochentag" Caption="Wochentag" CellStyle-Width="100" /> <telerik:PivotGridRowField DataField="Stunde" Caption="Stunde" CellStyle-Width="100" ZoneIndex="0" /> <telerik:PivotGridRowField DataField="BN_Telefon_Nebenstelle_1" Caption="Nebenstelle" CellStyle-Width="150" ZoneIndex="0" /> <telerik:PivotGridColumnField DataField="Jahr" Caption="Jahr" /> <telerik:PivotGridColumnField DataField="Monat" Caption="Monat" /> <telerik:PivotGridColumnField DataField="Art" Caption="Art" /> <telerik:PivotGridAggregateField DataField="Dauer" DataFormatString="{0:N0}" Aggregate="Count"> <HeaderCellTemplate> Anzahl </HeaderCellTemplate> </telerik:PivotGridAggregateField> <telerik:PivotGridAggregateField DataField="DauerSek" DataFormatString="{0:N0}"> <HeaderCellTemplate> Dauer </HeaderCellTemplate> <CellTemplate> <%# (Convert.ToInt64(Container.DataItem) == 0) ? "" : string.Format("{0:d2}:{1:d2}:{2:d2}", (Convert.ToInt64(Container.DataItem)/3600) , (Convert.ToInt64(Container.DataItem)%3600)/60 , (Convert.ToInt64(Container.DataItem)%3600)%60) %> </CellTemplate> <RowTotalCellTemplate> <%# (Convert.ToInt64(Container.DataItem) == 0) ? "" : string.Format("{0:d2}:{1:d2}:{2:d2}", (Convert.ToInt64(Container.DataItem)/3600) , (Convert.ToInt64(Container.DataItem)%3600)/60 , (Convert.ToInt64(Container.DataItem)%3600)%60) %> </RowTotalCellTemplate> <RowGrandTotalCellTemplate> <%# (Convert.ToInt64(Container.DataItem) == 0) ? "" : string.Format("{0:d2}:{1:d2}:{2:d2}", (Convert.ToInt64(Container.DataItem)/3600) , (Convert.ToInt64(Container.DataItem)%3600)/60 , (Convert.ToInt64(Container.DataItem)%3600)%60) %> </RowGrandTotalCellTemplate> <ColumnTotalCellTemplate> <%# (Convert.ToInt64(Container.DataItem) == 0) ? "" : string.Format("{0:d2}:{1:d2}:{2:d2}", (Convert.ToInt64(Container.DataItem)/3600) , (Convert.ToInt64(Container.DataItem)%3600)/60 , (Convert.ToInt64(Container.DataItem)%3600)%60) %> </ColumnTotalCellTemplate> <ColumnGrandTotalCellTemplate> <%# (Convert.ToInt64(Container.DataItem) == 0) ? "" : string.Format("{0:d2}:{1:d2}:{2:d2}", (Convert.ToInt64(Container.DataItem)/3600) , (Convert.ToInt64(Container.DataItem)%3600)/60 , (Convert.ToInt64(Container.DataItem)%3600)%60) %> </ColumnGrandTotalCellTemplate> </telerik:PivotGridAggregateField> </Fields> <ConfigurationPanelSettings Position="Left" DefaultDeferedLayoutUpdate="true" /> </telerik:RadPivotGrid> <telerik:RadHtmlChart ID="A2HtmlChart" runat="server" RenderMode="<%$ Resources:Einstellungen, RenderMode %>" Legend-Appearance-Position="Top" PlotArea-YAxis-LabelsAppearance-DataFormatString="N0" PlotArea-XAxis-LabelsAppearance-RotationAngle="45"> <Appearance> <FillStyle BackgroundColor="Transparent" /> </Appearance> <ChartTitle Text="Telefondaten"> <Appearance Align="Center" BackgroundColor="Transparent" Position="Top" /> </ChartTitle> </telerik:RadHtmlChart> </telerik:RadPageView> </telerik:RadMultiPage> </div></asp:Content>
and c#
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using Telerik.Web.UI;using System.Data;using System.Data.SqlClient;using System.Configuration;using System.Text;namespace BdVNet.Content.Reporting{ public partial class Telefondaten : System.Web.UI.Page { protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); ReportTelefonPivotGrid.ColumnGroupsDefaultExpanded = false; ReportTelefonPivotGrid.RowGroupsDefaultExpanded = false; ReportTelefonPivotGrid.Rebind(); base.OnPreRender(e); ReportTelefonZeitenPivotGrid.ColumnGroupsDefaultExpanded = false; ReportTelefonZeitenPivotGrid.RowGroupsDefaultExpanded = false; ReportTelefonZeitenPivotGrid.Rebind(); } protected void Page_Load(object sender, EventArgs e) { string currentYear = DateTime.Now.Year.ToString(); string currentMonth = String.Format(format: "{0:MM}", arg0: DateTime.Now); if (Code.AccessControl.UserAdminAccessIsValid == true || Code.AccessControl.UserMgmAccessIsValid == true) { var menuSelect = (RadMenu)Master.FindControl(id: "BdVMasterMenu"); menuSelect.Items[2].Items[1].Selected = true; } else { Response.Redirect(url: "../Geschaeft.aspx"); } Label masterPageTextLabel; masterPageTextLabel = (Label)Master.FindControl("BdVMasterTextLabel"); masterPageTextLabel.Text = "Reporting | Telefonanlage"; if (!IsPostBack) { ReportTelefonPivotGrid.CollapsedColumnIndexes.Add(new object[] { currentYear }); ReportTelefonZeitenPivotGrid.CollapsedColumnIndexes.Add(new object[] { currentYear }); //ReportTelefonPivotGrid.CollapsedColumnIndexes.Add(new object[] { currentMonth }); } } protected void ReportTelefonPivotGrid_NeedDataSource(object sender, Telerik.Web.UI.PivotGridNeedDataSourceEventArgs e) { string sqlSelectCommand = "SELECT * FROM [BN_R_Telefonanlage] WHERE Name != ''"; var adapter = new SqlDataAdapter(sqlSelectCommand, ConfigurationManager.ConnectionStrings["BdVNet"].ConnectionString); DataTable myDataTable = new DataTable(); adapter.Fill(myDataTable); ReportTelefonPivotGrid.DataSource = myDataTable; } HashSet<string> columnNames = new HashSet<string>(); Dictionary<string, ColumnSeries> columnSeriesByRowName = new Dictionary<string, ColumnSeries>(); protected void ReportTelefonPivotGrid_CellDataBound(object sender, PivotGridCellDataBoundEventArgs e) { PivotGridDataCell dataCell = e.Cell as PivotGridDataCell; if (columnNames.Count == 0) { this.A1HtmlChart.PlotArea.XAxis.Items.Clear(); this.A1HtmlChart.PlotArea.Series.Clear(); } if (dataCell != null && dataCell.CellType == PivotGridDataCellType.DataCell) { string rowName = GetName(dataCell.ParentRowIndexes); string columnName = GetName(dataCell.ParentColumnIndexes); columnName = columnName.Replace('\'', ' '); if (columnNames.Add(columnName)) { AxisItem axisItem = new AxisItem(columnName); this.A1HtmlChart.PlotArea.XAxis.Items.Add(axisItem); } ColumnSeries columnSeries = null; if (columnSeriesByRowName.ContainsKey(rowName)) { columnSeries = columnSeriesByRowName[rowName]; columnSeries.LabelsAppearance.DataFormatString = "N2"; //columnSeries.LabelsAppearance.ClientTemplate = "test #=value#"; } else { columnSeries = new ColumnSeries(); columnSeriesByRowName.Add(rowName, columnSeries); columnSeries.Name = rowName; columnSeries.LabelsAppearance.DataFormatString = "N0"; this.A1HtmlChart.PlotArea.Series.Add(columnSeries); } CategorySeriesItem item = new CategorySeriesItem(); decimal value = 0; if (e.Cell.DataItem != null && decimal.TryParse(e.Cell.DataItem.ToString(), out value)) { if (value != 0) { if (columnName.Contains("Dauer")) { item.Y = value / 3600; } else { item.Y = value; } } } else { item.Y = null; } columnSeries.SeriesItems.Add(item); } } private string GetName(object[] indexes) { StringBuilder builder = new StringBuilder(); foreach (object index in indexes) { builder.Append(index.ToString()); builder.Append(" | "); } builder.Remove(builder.Length -3, 3); builder.Replace("Count of Dauer", "Anzahl"); builder.Replace("Sum of DauerSek", "Dauer"); return builder.ToString(); } protected void ReportTelefonZeitenPivotGrid_NeedDataSource(object sender, PivotGridNeedDataSourceEventArgs e) { string sqlSelectCommand = "SELECT * FROM [BN_R_Telefonanlage] WHERE Name IS NULL"; var adapter = new SqlDataAdapter(sqlSelectCommand, ConfigurationManager.ConnectionStrings["BdVNet"].ConnectionString); DataTable myDataTable = new DataTable(); adapter.Fill(myDataTable); ReportTelefonZeitenPivotGrid.DataSource = myDataTable; } protected void ReportTelefonZeitenPivotGrid_CellDataBound(object sender, PivotGridCellDataBoundEventArgs e) { PivotGridDataCell dataCell = e.Cell as PivotGridDataCell; if (columnNames.Count == 0) { this.A2HtmlChart.PlotArea.XAxis.Items.Clear(); this.A2HtmlChart.PlotArea.Series.Clear(); } if (dataCell != null && dataCell.CellType == PivotGridDataCellType.DataCell) { string rowName = GetName(dataCell.ParentRowIndexes); string columnName = GetName(dataCell.ParentColumnIndexes); columnName = columnName.Replace('\'', ' '); if (columnNames.Add(columnName)) { AxisItem axisItem = new AxisItem(columnName); this.A2HtmlChart.PlotArea.XAxis.Items.Add(axisItem); } ColumnSeries columnSeries = null; if (columnSeriesByRowName.ContainsKey(rowName)) { columnSeries = columnSeriesByRowName[rowName]; columnSeries.LabelsAppearance.DataFormatString = "N2"; //columnSeries.LabelsAppearance.ClientTemplate = "test #=value#"; } else { columnSeries = new ColumnSeries(); columnSeriesByRowName.Add(rowName, columnSeries); columnSeries.Name = rowName; columnSeries.LabelsAppearance.DataFormatString = "N0"; this.A2HtmlChart.PlotArea.Series.Add(columnSeries); } CategorySeriesItem item = new CategorySeriesItem(); decimal value = 0; if (e.Cell.DataItem != null && decimal.TryParse(e.Cell.DataItem.ToString(), out value)) { if (value != 0) { if (columnName.Contains("Dauer")) { item.Y = value / 3600; } else { item.Y = value; } } } else { item.Y = null; } columnSeries.SeriesItems.Add(item); } } }}
Many thanks in advance
Andreas
