This is mainly focus on DateTime fields. They automatically create children name Day, Week and etc.They should be named “<parentName>.Day” Only for local field description Add in LocalDataSourceFieldDescriptionsProvider property named FormatDisplayNameAsName which turn on/off this functionality ((LocalDataSourceFieldDescriptionsProvider)((LocalDataSourceProvider)this.radPivotGrid1.DataProvider).FieldDescriptionsProvider).FormatDisplayNameAsFieldName= true
My pivot grid data size is 90,388 rows, and I export data to xlsx format with SheetName = "data".
The output file generated in this case (correctly) has 65536 rows on sheet "data" and the remaining 24852 rows on the sheet "data_2" (since SheetMaxRows = 65536 and total rows > SheetMaxRows, second sheet "data_2" is added automatically).
But the rows on the sheet "data_2" are written starting from line number 65538. The data on sheet "data_2" starts on line 65538 and goes till line 90389.
Expected:
Actual:
Workaround; use the following custom renderer:
public class MyRenderer : SpreadExportRenderer
{
public override void CreateCellSelection(int rowIndex, int columnIndex)
{
if (rowIndex > (int)Telerik.WinControls.UI.Export.ExcelMaxRows._65536)
{
rowIndex = rowIndex % (int)Telerik.WinControls.UI.Export.ExcelMaxRows._65536 - 1;
}
else
{
rowIndex = rowIndex % (int)Telerik.WinControls.UI.Export.ExcelMaxRows._65536;
}
base.CreateCellSelection(rowIndex, columnIndex);
}
}
Here is my code for localizing the Sum aggregate function. The obtained result is a partial translation:
public RadForm1()
{
PivotGridLocalizationProvider.CurrentProvider = new MyEnglishPivotGridLoclizationProvider();
InitializeComponent();
}
private void RadForm1_Load(object sender, EventArgs e)
{
this.ordersTableAdapter.Fill(this.nwindDataSet.Orders);
this.radPivotGrid1.RowGroupDescriptions.Add(new DateTimeGroupDescription() { PropertyName = "OrderDate", Step = DateTimeStep.Year, GroupComparer = new GroupNameComparer() });
this.radPivotGrid1.RowGroupDescriptions.Add(new DateTimeGroupDescription() { PropertyName = "OrderDate", Step = DateTimeStep.Quarter, GroupComparer = new GroupNameComparer() });
this.radPivotGrid1.RowGroupDescriptions.Add(new DateTimeGroupDescription() { PropertyName = "OrderDate", Step = DateTimeStep.Month, GroupComparer = new GroupNameComparer() });
this.radPivotGrid1.ColumnGroupDescriptions.Add(new PropertyGroupDescription() { PropertyName = "EmployeeID", GroupComparer = new GrandTotalComparer() });
this.radPivotGrid1.AggregateDescriptions.Add(new PropertyAggregateDescription() { PropertyName = "Freight", AggregateFunction = AggregateFunctions.Sum });
this.radPivotGrid1.AggregateDescriptions.Add(new PropertyAggregateDescription() { PropertyName = "Freight", AggregateFunction = AggregateFunctions.Count });
this.radPivotGrid1.FilterDescriptions.Add(new PropertyFilterDescription() { PropertyName = "ShipCountry", CustomName = "Country" });
this.radPivotGrid1.DataSource = this.ordersBindingSource;
}
class MyEnglishPivotGridLoclizationProvider : PivotGridLocalizationProvider
{
public override string GetLocalizedString(string id)
{
switch (id)
{
case PivotStringId.Sum:
return "Soma";
default:
return base.GetLocalizedString(id);
}
}
}
The error is reproducible in the First look example of RadPivotGrid:
How to reproduce: see the attached video Workaround: public partial class Form2 : Form { public Form2() { InitializeComponent(); this.radPivotFieldList1.DragDropService = new CustomPivotFieldListDragDropService(this.radPivotFieldList1); } private void Form2_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'nwindDataSet.Orders' table. You can move, or remove it, as needed. this.ordersTableAdapter.Fill(this.nwindDataSet.Orders); } } public class CustomPivotFieldListDragDropService : PivotFieldListDragDropService { private RadPivotFieldList fieldList; private Telerik.WinControls.UI.PivotFieldList.FieldPayload payload; public CustomPivotFieldListDragDropService(RadPivotFieldList fieldList) : base(fieldList) { this.fieldList = fieldList; } protected override void PerformStart() { base.PerformStart(); Telerik.WinControls.UI.PivotFieldList.IField draggedField = this.GetField(this.Context); if (draggedField == null) { this.Stop(false); return; } this.payload = new Telerik.WinControls.UI.PivotFieldList.FieldPayload(draggedField); } protected override void OnPreviewDragOver(RadDragOverEventArgs e) { RadElement targetElement = this.DropTarget as RadElement; Telerik.WinControls.UI.PivotFieldList.IField targetField = this.GetField(targetElement); if (targetElement != null && targetElement.ElementTree.Control == this.fieldList.ReportFiltersControl && this.payload != null) { foreach (Telerik.WinControls.UI.PivotFieldList.IField field in this.fieldList.ViewModel.Filters) { if (field.FieldInfo == payload.DraggedField.FieldInfo && this.Context is TreeNodeElement )) { e.CanDrop = false; this.payload.SetDestination(null); this.payload.RemoveFromSource = false; return; } } } base.OnPreviewDragOver(e); } private Telerik.WinControls.UI.PivotFieldList.IField GetField(object context) { RadListVisualItem listItem = context as RadListVisualItem; TreeNodeElement treeItem = context as TreeNodeElement; PivotFieldListItemButton button = context as PivotFieldListItemButton; if (button != null) { listItem = button.Owner; } Telerik.WinControls.UI.PivotFieldList.IField field1 = null, field2 = null; if (listItem != null && listItem.Data != null) { field1 = listItem.Data.DataBoundItem as Telerik.WinControls.UI.PivotFieldList.IField; } if (treeItem != null && treeItem.Data != null) { field2 = treeItem.Data.DataBoundItem as Telerik.WinControls.UI.PivotFieldList.IField; } return field1 ?? field2; } }
How to reproduce: Me.RadPivotGrid1.DataSource = Nothing Workaround: DirectCast(Me.RadPivotGrid1.DataProvider, LocalDataSourceProvider).ItemsSource = Nothing Dim viewModel = Me.RadPivotGrid1.PivotGridElement.GetType().GetField("viewModel", BindingFlags.Instance Or BindingFlags.NonPublic).GetValue(Me.RadPivotGrid1.PivotGridElement) viewModel.GetType().GetProperty("DataProvider").SetValue(viewModel, Nothing)
How to reproduce: check the attached project and screenshots, the correct items are shown in screenshot correct-items-calculated-field.jpg Workaround: public partial class Form1 : Form { private LocalDataSourceProvider provider; public Form1() { InitializeComponent(); //Setup pivot and add calculated field //Workaround this.radPivotFieldList1.ValuesControl.CreatingVisualListItem += ValuesControl_CreatingVisualListItem; } private void ValuesControl_CreatingVisualListItem(object sender, CreatingVisualListItemEventArgs args) { args.VisualItem = new MyPivotFieldListVisualItem(this.radPivotFieldList1.ViewModel); } } public class MyPivotFieldListVisualItem : PivotFieldListVisualItem { FieldListViewModel viewModel; public MyPivotFieldListVisualItem(FieldListViewModel viewModel) : base(viewModel) { this.viewModel = viewModel; } protected override void UpdateContextMenu() { base.UpdateContextMenu(); PivotFieldListItemButton button = (PivotFieldListItemButton)typeof(PivotFieldListVisualItem).GetField("button", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(this); string providerName = this.viewModel.DataProvider != null ? this.viewModel.DataProvider.GetType().FullName : String.Empty; if (this.Data == null) { return; } if (this.Data.DataBoundItem is Value && !(providerName.Contains("Xmla") || providerName.Contains("Adomd"))) { for (int i = 0; i < 5; i++) { button.Items.RemoveAt(i); } } } }
To reproduce: - Set the text of a GroupElement in the GroupElementFormatting event handler. - Start the grid and resize a column for example. - You will notice the the text is reverted to its original value. Workaround: - Use the following CustomGroupElement class: public class CustomGroupElement : PivotGroupElement { protected override void SynchronizeProperties() { base.SynchronizeProperties(); this.Text = "test"; } protected override Type ThemeEffectiveType { get { return typeof(PivotGroupElement); } } } - you can replace the default element with the custom one in GroupElementCreating event handler: Private Sub radPivotGrid1_GroupElementCreating(sender As Object, e As PivotGroupElementCreatingEventArgs) e.GroupElement = New CustomGroupElement() End Sub
To reproduce: 1. Open QSF => Pivot => Printing example2. Click Print settings button3. Choose layout type - Compact4. Click Preview button and will see that there is exception WORKAROUND: radPivotGrid1.PrintStyle = new MyPrintStyle();
When RadPivotGrid is in CompactLayout mode and there is a RadChartView bound to the grid and when the selection in the grid changes, in some cases a null reference exception will be thrown.
Due to an exception in the data engine, no data is displayed if there are DBNull values in the data source.
To reproduce: Try setting the value in the CellForamting event. Workaround: class MySpreadExportRenderer : SpreadExportRenderer { public override void SetCellSelectionValue(DataType dataType, object value) { base.SetCellSelectionValue(dataType, value); if (dataType == DataType.Number) { CellRange range = ((CellSelection)this.GetCellSelection()).CellRanges.ElementAtOrDefault(0); double d; if (double.TryParse(Convert.ToString(value), out d)) { var cell = ((Worksheet)this.GetWorksheet()).Cells[range.FromIndex.RowIndex, range.FromIndex.ColumnIndex]; cell.SetFormat(new CellValueFormat("#,##0.00")); cell.SetValue(d); } } } }
If there are many row descriptions and the total width of the row headers area is larger than the width the of the control, the vertical scroll is not visible. The same applies for the horizontal scroll and the column headers area.
To workaround, also add a handler to the AggregatesPositionElementCreating event.
To reproduce show a message box in the MouseDown event of the control and move the mouse over the data cells
FIX. RadPivotGrid - MouseUp is not fired for data cells