Fex- Datagrid- пользовательский заголовок - PullRequest
1 голос
/ 02 апреля 2012

Я хочу поместить текстовое поле ввода в заголовок сетки данных в flex, значения которого динамически изменяются в зависимости от количества данных или значения, присутствующего в этом столбце перкулярной формы.Пожалуйста, помогите мне, я выкладываю изображение, что я хочу.Заранее спасибо. enter image description here

1 Ответ

2 голосов
/ 02 апреля 2012

Я предполагаю, что вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...