@@ -241,6 +241,11 @@ protected override void ProcessCompletedTask(AsyncDataSourcePageTaskHolder compl
241241 if ( schema == null )
242242 {
243243 schema = ResolveSchema ( ) ;
244+
245+ lock ( SyncLock )
246+ {
247+ ActualSchema = schema ;
248+ }
244249 }
245250 if ( isAggregationSupportedByServer )
246251 {
@@ -489,7 +494,7 @@ private ISummaryResult[] ResolveSummaryInformation()
489494 summary = GetSummaryQueryParameters ( false ) ;
490495 }
491496
492- var commandText = _entitySet + "& $apply=" ;
497+ var commandText = _entitySet + "? $apply=" ;
493498 if ( ! String . IsNullOrEmpty ( filter ) )
494499 {
495500 commandText += "filter(" + filter + ")/" ;
@@ -572,7 +577,8 @@ private ISummaryResult[] CreateSummaryResults(IDictionary<string, object> data)
572577 for ( var i = 0 ; i < _summaryDescriptions . Count ; i ++ )
573578 {
574579 var summary = _summaryDescriptions [ i ] ;
575- var summaryName = _summaryDescriptions [ i ] . PropertyName ;
580+ var propertyName = _summaryDescriptions [ i ] . PropertyName ;
581+ var summaryName = propertyName ;
576582 switch ( summary . Operand )
577583 {
578584 case SummaryOperand . Average :
@@ -588,7 +594,7 @@ private ISummaryResult[] CreateSummaryResults(IDictionary<string, object> data)
588594 summaryName += "Sum" ;
589595 break ;
590596 case SummaryOperand . Count :
591- summaryName + = "$__count" ;
597+ summaryName = "$__count" ;
592598 break ;
593599 }
594600
@@ -597,13 +603,68 @@ private ISummaryResult[] CreateSummaryResults(IDictionary<string, object> data)
597603 break ;
598604 }
599605
600- var summaryValue = data [ summaryName ] ;
606+ object summaryValue = data [ summaryName ] ;
607+ // odata is returning strings to us so we need to convert it to the appropriate
608+ // type.
609+ if ( summary . Operand == SummaryOperand . Count )
610+ {
611+ summaryValue = Convert . ToInt32 ( data [ summaryName ] ) ;
612+ }
613+ else
614+ {
615+ switch ( ResolvePropertyType ( propertyName ) )
616+ {
617+ case DataSourceSchemaPropertyType . BooleanValue :
618+ summaryValue = Convert . ToBoolean ( summaryValue ) ;
619+ break ;
620+ case DataSourceSchemaPropertyType . ByteValue :
621+ summaryValue = Convert . ToByte ( summaryValue ) ;
622+ break ;
623+ case DataSourceSchemaPropertyType . DateTimeValue :
624+ summaryValue = Convert . ToDateTime ( summaryValue ) ;
625+ break ;
626+ case DataSourceSchemaPropertyType . DecimalValue :
627+ summaryValue = Convert . ToDecimal ( summaryValue ) ;
628+ break ;
629+ case DataSourceSchemaPropertyType . DoubleValue :
630+ summaryValue = Convert . ToDouble ( summaryValue ) ;
631+ break ;
632+ case DataSourceSchemaPropertyType . IntValue :
633+ summaryValue = ( int ) Convert . ToDouble ( summaryValue ) ;
634+ break ;
635+ case DataSourceSchemaPropertyType . LongValue :
636+ summaryValue = Convert . ToInt64 ( summaryValue ) ;
637+ break ;
638+ case DataSourceSchemaPropertyType . ShortValue :
639+ summaryValue = Convert . ToInt16 ( summaryValue ) ;
640+ break ;
641+ case DataSourceSchemaPropertyType . SingleValue :
642+ summaryValue = Convert . ToSingle ( summaryValue ) ;
643+ break ;
644+ case DataSourceSchemaPropertyType . StringValue :
645+ summaryValue = Convert . ToString ( summaryValue ) ;
646+ break ;
647+ }
648+ }
601649 summaryResults . Add ( new DefaultSummaryResult ( summary . PropertyName , summary . Operand , summaryValue ) ) ;
602650 }
603651
604652 return summaryResults . ToArray ( ) ;
605653 }
606654
655+ private DataSourceSchemaPropertyType ResolvePropertyType ( string propertyName )
656+ {
657+ var valueType = DataSourceSchemaPropertyType . ObjectValue ;
658+ for ( var j = 0 ; j < this . ActualSchema . PropertyNames . Length ; j ++ )
659+ {
660+ if ( this . ActualSchema . PropertyNames [ j ] == propertyName )
661+ {
662+ valueType = this . ActualSchema . PropertyTypes [ j ] ;
663+ }
664+ }
665+ return valueType ;
666+ }
667+
607668 private string _filterString = null ;
608669 private string _selectedString = null ;
609670 public const int SchemaRequestIndex = - 1 ;
0 commit comments