#silverlight #pivotviewer
#silverlight #pivotviewer
Вопрос:
Я создаю приложение PivotViewer для отображения истории продаж отделений магазинов для предприятий розничной торговли.
Мы создаем динамические коллекции из базы данных sql при открытии приложения. sql-запрос группирует суммы продаж по месяцам.
Приложения PivotViewer показывают каждую ветку и связанную с ней сумму за историю продаж. однако, поскольку объем продаж сгруппирован по месяцам, мы получаем 12 разных изображений магазина в поле результатов. Это делает результаты бессмысленными.
Например, если пользователь выбирает магазин Chadstone и историю продаж за январь, февраль и март, в поле результатов отображаются 3 разных изображения. Вместо этого мы хотели бы, чтобы он показывал 1 результат с цифрами за каждый месяц, суммированными по годам.
Я провел некоторое исследование, и, похоже, Pivot Viewer считывает только строки из коллекции и не может выполнить никаких вычислений.
Кто-нибудь знает, правда ли это или как это можно решить?
Спасибо
Ответ №1:
К сожалению, элемент управления PivotViewer на данный момент не поддерживает эту возможность. Я думаю, что с возможностью выполнения и отображения результата вычислений элемент управления PivotViewer был бы фантастическим для визуализации данных вместо отчетов. К сожалению, это недостающая часть головоломки, и я не нашел никакого работоспособного способа реализации такого поведения (это очень заблокированный элемент управления, и к нему сложно добавить функциональность). Я потратил немного времени на попытки, затем решил, что это неосуществимо. PivotViewer должен стать основным элементом управления в Silverlight 5, и я ожидал, что будет добавлено много функциональных возможностей, которые, надеюсь, позволят реализовать подобный сценарий. Однако многие анонсированные функции Silverlight 5 были исключены из текущей бета-версии, и это одна из них. Нам нужно будет скрестить пальцы, чтобы возможность реализовать это была доступна, когда она будет обновлена для Silverlight 5 (вероятно, с Silverlight 5 beta 2).
Крис
Ответ №2:
Чтобы выполнить это, вам придется добавить дополнительную обработку на стороне сервера (где вы генерируете свой CXML). Это правда, текущий PivotViewer — это просто средство просмотра. Он берет данные, находящиеся в файле CXML, и отображает их вместе с изображением с глубоким увеличением, которое связано с ним.
Итак, чтобы справиться с вашей ситуацией, вам нужно будет обработать ваш запрос перед созданием вашего CXML или вашего изображения. Затем вы можете сгруппировать свои элементы в этой точке и добавить любое суммирование, которое вам нужно. Вам просто нужно иметь в виду, что вы отображаете только то, что есть в CXML, но вы можете поместить в этот CXML все, что захотите.
Что касается SL5, у вас все равно не будет никаких вычислений как таковых. Вы сможете использовать коллекции объектов более стандартным способом типа «ItemsSource», но он все равно будет отображать то, что содержится в этих данных. Однако, как и в CXML, вы можете объединить свои ежемесячные данные в один объект и отображать их вне этого объекта.
Тони
Ответ №3:
Я подключил обработчик событий к измененному свойству и сделал следующее…Я использовал это для добавления выводов на карту Bing, и это отлично сработало.
void PivotViewer_PropertyChanged( object _Sender, System.ComponentModel.PropertyChangedEventArgs _Args )
{
if( _Args.PropertyName == "InScopeItemIds" )
{
PivotViewer pivotViewer = ( _Sender as PivotViewer );
foreach( string isii in pivotViewer.InScopeItemIds )
{
PivotItem pi = pivotViewer.GetItem( isii );
/*
Do some work on the items in view?
*/
}
}
}