Hello,
it doesn't work for me. I don't know why...
My code try to build the code with parameters in a table, later I try to add calculatedfield, but I can't see the calculated field in the list... I think is the part of "The important part here is to add the custom field before setting the ItemsSource property", but I don't know how to manage it with my code...
My code:
Try
Me.RadPivotGrid1.AggregatesPosition = PivotAxis.Columns
'MsgBox(numcubo)
'cierro conexión
conexion.Close()
'abro conexión
conexion.Open()
'borro y cojo el detalle de apuntes del mes
strSQL = "SELECT * FROM [Profesionales].[dbo].[COSTES_cubos] where trim(cubo)=trim('" & numcubo & "') order by cubo, tipo, orden "
oCommand = New SqlCommand(strSQL, conexion)
oCommand.CommandTimeout = 0
oCommand.CommandText = strSQL
dataResult = oCommand.ExecuteReader()
If dataResult.HasRows Then
Do While dataResult.Read()
'sql
If dataResult.Item("tipo") = 1 Then
'strSQL = Me.Ini_SQL
strSQL = dataResult.Item("texto").ToString.Trim()
oCommand2 = New SqlCommand(strSQL, conexion)
oCommand2.CommandText = strSQL
oCommand2.CommandTimeout = 0
Cube_DataAdapter2 = New SqlDataAdapter(oCommand2)
Cube_DataSet2 = New DataSet()
Cube_DataAdapter2.Fill(Cube_DataSet2, "SQL")
End If
'fila
If dataResult.Item("tipo") = 2 Then
'Asigno valores
pivotRow = New PropertyGroupDescription()
pivotRow.PropertyName = dataResult.Item("texto").ToString.Trim()
pivotRow.CustomName = dataResult.Item("alias").ToString.Trim()
Me.RadPivotGrid1.ColumnGroupDescriptions.Add(pivotRow)
End If
'columna
If dataResult.Item("tipo") = 3 Then
'Asigno valores
pivotCol = New PropertyGroupDescription()
' Dim pivotC = New PropertyAggregateDescription()
pivotCol.PropertyName = dataResult.Item("texto").ToString.Trim()
pivotCol.CustomName = dataResult.Item("alias").ToString.Trim()
Me.RadPivotGrid1.RowGroupDescriptions.Add(pivotCol)
End If
'datos
If dataResult.Item("tipo") = 4 Then
'Asigno valores
pivotVal = New PropertyAggregateDescription()
pivotVal.PropertyName = dataResult.Item("texto").ToString.Trim()
pivotVal.CustomName = dataResult.Item("alias").ToString.Trim()
pivotVal.StringFormat = dataResult.Item("formato").ToString.Trim()
pivotVal.AggregateFunction = AggregateFunctions.Sum
Me.RadPivotGrid1.AggregateDescriptions.Add(pivotVal)
End If
'filtros
If dataResult.Item("tipo") = 5 Then
Dim description As New PropertyFilterDescription()
Dim condition As New ComparisonCondition()
condition.Condition = Telerik.Pivot.Core.Filtering.Comparison.Equals
'condition.Than = "UK"
description.PropertyName = dataResult.Item("texto").ToString.Trim()
'description.Condition = condition
description.CustomName = dataResult.Item("alias").ToString.Trim()
Me.RadPivotGrid1.FilterDescriptions.Add(description)
End If
'orden
If dataResult.Item("tipo") = 6 Then
Dim propGroupDescription As PropertyGroupDescription = DirectCast(Me.RadPivotGrid1.RowGroupDescriptions(0), PropertyGroupDescription)
If dataResult.Item("sort").ToString.Trim() = "Ascending" Then
propGroupDescription.SortOrder = Telerik.Pivot.Core.SortOrder.Ascending
Else
propGroupDescription.SortOrder = Telerik.Pivot.Core.SortOrder.Descending
End If
propGroupDescription.GroupComparer = New GrandTotalComparer() With {
.AggregateIndex = dataResult.Item("orden")
}
Me.RadPivotGrid1.ReloadData()
End If
Loop
End If
Me.RadPivotGrid1.DataSource = Cube_DataSet2
Me.RadPivotGrid1.DataMember = "SQL"
Using RadPivotGrid1.PivotGridElement.DeferRefresh()
Dim calculatedField As New CommissionCalculatedField()
calculatedField.Name = "Commission"
DirectCast(Me.RadPivotGrid1.DataProvider, LocalDataSourceProvider).CalculatedFields.Add(calculatedField)
End Using
''Cargo layout por defecto
'If Me.Ini_Layout <> "" Then
' Me.RadPivotGrid1.LoadLayout(Me.Ini_Layout)
'End If
'Cargo grafico
Me.RadChartView.DataSource = Me.RadPivotGrid1
Dim verticalAxis As New LinearAxis()
'verticalAxis.AxisType = AxisType.Second
Dim horizontalAxis As New CategoricalAxis()
horizontalAxis.LabelFitMode = AxisLabelFitMode.MultiLine
Me.RadChartView.Area.Axes.Add(horizontalAxis)
Me.RadChartView.Area.Axes.Add(verticalAxis)
Me.RadChartView.ChartElement.LegendElement.Visibility = Telerik.WinControls.ElementVisibility.Visible
'Me.RadChartView.ChartElement.LegendPosition = LegendPosition.Right
Me.RadChartView.ChartElement.LegendElement.Alignment = System.Drawing.ContentAlignment.TopCenter
'Configuracion totales grafico
Me.RadPivotGrid1.ChartDataProvider.IncludeRowSubTotals = False
Me.RadPivotGrid1.ChartDataProvider.IncludeColumnSubTotals = False
Me.RadPivotGrid1.ChartDataProvider.IncludeRowGrandTotals = False
Me.RadPivotGrid1.ChartDataProvider.IncludeColumnGrandTotals = False
'Oculto grafico
Me.SplitContainer2.Panel2Collapsed = True
Me.SplitContainer1.Panel1Collapsed = True
Me.RadChartView.Title = Me.Titulo
'cierro conexión
conexion.Close()
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical)
End Try
and the class:
Public Class CommissionCalculatedField
Inherits CalculatedField
Private extendPriceField As RequiredField
Public Sub New()
Me.Name = "Commission"
Me.extendPriceField = RequiredField.ForProperty("importe")
End Sub
Protected Overrides Function RequiredFields() As IEnumerable(Of RequiredField)
Return New List(Of RequiredField) From {extendPriceField}
End Function
Protected Overrides Function CalculateValue(aggregateValues As IAggregateValues) As AggregateValue
Dim aggregateValue = aggregateValues.GetAggregateValue(Me.extendPriceField)
If aggregateValue.IsError() Then
Return aggregateValue
End If
Dim extendedPrice As Double = aggregateValue.ConvertOrDefault(Of Double)()
Return New DoubleAggregateValue(extendedPrice * 0.1)
Return Nothing
End Function
End Class