Skip to content

Commit f190f91

Browse files
Merge pull request #12 from Infragistics/igrob-summary-fixes
Fix summary issues
2 parents 409f79a + 3264006 commit f190f91

File tree

1 file changed

+65
-4
lines changed

1 file changed

+65
-4
lines changed

ODataDataProvider/ODataVirtualDataSourceDataProviderWorker.cs

Lines changed: 65 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)