Я предполагаю, что вы можете использовать Spark DataGrid.В этом случае вам просто нужно создать собственный headerRenderer.Для простоты мы начнем со стандартного headerRenderer.В ваших исходниках Flex SDK найдите класс spark.skins.spark.DefaultGridHeaderRenderer
.Скопируйте этот файл в свой проект и переименуйте его соответствующим образом.
Внутри этого класса найдите компоненты labelDisplayGroup
и sortIndicatorGroup
(они внизу).Они находятся внутри HGroup, поэтому мы можем просто добавить наш счетчик между ними.
<!-- I removed the original comments for brevity -->
<s:HGroup left="7" right="7" top="5" bottom="5" gap="2" verticalAlign="middle">
<s:Group id="labelDisplayGroup" width="100%" />
<!-- our counter component -->
<s:Label id="numRowsDisplay" />
<s:Group id="sortIndicatorGroup" includeInLayout="false" />
</s:HGroup>
Пока что для визуального компонента;теперь мы должны соответствующим образом обновить свойство text
.В блоке сценария добавьте следующий фрагмент:
private var dp:IList;
override public function set owner(value:DisplayObjectContainer):void {
if (dp) dp.removeEventListener(CollectionEvent.COLLECTION_CHANGE, updateNumRows);
if (super.owner) super.owner.removeEventListener(PropertyChangeEvent.PROPERTY_CHANGE, onPropertyChange);
super.owner = value;
dp = value ? DataGrid(value).dataProvider : null;
updateNumRows();
if (dp) dp.addEventListener(CollectionEvent.COLLECTION_CHANGE, updateNumRows);
if (value) value.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, onPropertyChange);
}
private function onPropertyChange(event:PropertyChangeEvent):void {
if (event.property == 'dataProvider') {
dp = event.newValue as IList;
updateNumRows();
}
}
private function updateNumRows(event:CollectionEvent=null):void {
numRowsDisplay.text = (dp ? dp.length : 0) + "";
}
Что здесь происходит?свойство owner
средства визуализации относится к компоненту данных, который содержит этот модуль визуализации;в этом случае DataGrid.Поэтому, когда владелец назначается для средства визуализации, мы получаем доступ к его dataProvider
и используем его length
для обновления компонента счетчика.
Так для чего эти слушатели?Есть два случая, которые вы можете предвидеть.
- Количество элементов в поставщике данных изменяется: поэтому мы прослушиваем поставщик данных для событий CollectionChange.
- Весь dataProvider измененили обнуляется: для этого мы прослушиваем PropertyChangeEvents в DataGrid и обновляем счетчик только при изменении свойства dataProvider