Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.08.2011, 15:26
Apikaster вне форума Посмотреть профиль Отправить личное сообщение для Apikaster Найти все сообщения от Apikaster
  № 1  
Ответить с цитированием
Apikaster

Регистрация: Sep 2010
Сообщений: 36
По умолчанию Иерархический сорт

Доброе время суток друзья ...
У меня проблема ...
Сделал иерархическое дерево в адвансед дата гриде ...
Написал к нему сорт ... (вписываете слово в текст филд, и если слово таковое есть то он чтобы его находил)
Чтобы он внутри иерархий искал вписанный в текст филд слово ...
И обрывался при нахождение такого слова (вписанного в текст филде) ... (беик)
Но проблема встала в следующем ...
Он нашел ... И сработал брейк ... Таблица вся открылась ...
Но теперь как сделать так чтобы он перешел на тот объект который найден (у которого текст в гриде соответствует вписанному в текс филде слову)?
И чтобы пользователь понял что вписанный объект найден и видел что он выбран ...
Я использовал в начале другой сорт но он убирал все другие записи и находил именно одну или несколько которые соответствует вписанному слову в текст филде , но таковой вариант их не устроил ...
А так данная таблица раскрывается и где то внизу с прокруткой можно найти соответствие ...
Помогите ... Прошу ... А то я уже измучился с этой задачей ...


Последний раз редактировалось Apikaster; 10.08.2011 в 16:00.
Старый 10.08.2011, 17:14
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Apikaster, поменьше эмоций, больше внятной речи. Точка пишется так ".", а не так "...". Пробел ставиться после запятой, а не перед.
Цитата:
(беик)
Внутренние звуки вашего организма, тоже малоинформативны.

У AdvancedDataGrid есть свойство selectedItem, сортировка тут, вообще к делу не относится.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 11.08.2011, 09:41
Apikaster вне форума Посмотреть профиль Отправить личное сообщение для Apikaster Найти все сообщения от Apikaster
  № 3  
Ответить с цитированием
Apikaster

Регистрация: Sep 2010
Сообщений: 36
Цитата:
Сообщение от alatar Посмотреть сообщение
Apikaster, поменьше эмоций, больше внятной речи. Точка пишется так ".", а не так "...". Пробел ставиться после запятой, а не перед.

Внутренние звуки вашего организма, тоже малоинформативны.

У AdvancedDataGrid есть свойство selectedItem, сортировка тут, вообще к делу не относится.
Благодарю.
Давайте я вам попробую объяснить.
В гриде у меня есть столбец нейм. И по нему я ищу соответствующее наименование.
Как думаете? Надо сначала найти индекс, и после поставить на него селектед индекс?


Последний раз редактировалось Apikaster; 11.08.2011 в 09:51.
Старый 11.08.2011, 12:02
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Или найти сам искомый элемент и использовать selectedItem или найти его индекс и использовать selectedIndex.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 11.08.2011, 13:51
Apikaster вне форума Посмотреть профиль Отправить личное сообщение для Apikaster Найти все сообщения от Apikaster
  № 5  
Ответить с цитированием
Apikaster

Регистрация: Sep 2010
Сообщений: 36
Я пробовал найти индекс. Но как видно иерархическая таблица не понимает понятия selectedIndex. А selectedItem почему то не переходит. Я использовал понятие курсор, чтобы искать внутри иерархической таблицы. Может из-за этого?
Код AS3:
 
protected function findObjName(s:String):void{
	var sort:Sort = new Sort();
	var f:Boolean;
	var s1:String;
	var curs:IHierarchicalCollectionViewCursor;
	sort.fields = [new SortField("Name")];
	dpOhdORUCHV.sort = sort;
	ADG.expandAll();
	curs = HierarchicalCollectionViewCursor(dpOhdORUCHV.createCursor());
	ADG.hierarchicalCollectionView = dpOhdORUCHV;
 
	trace("start search");
	while (curs.current){
		s1 = curs.current.Name;
		//trace("find = " + s1);
		//trace("find = " + curORUC.);
		if ( s1.match(s) != null){
			trace("find = " + s1);
			//curs.seek(CursorBookmark.CURRENT);
			break;
		}
		curs.moveNext();
	}				
}
Методу findObjName передается то слово вписанное в TextInput.
ADG это у меня AdvancedDataGrid.


Последний раз редактировалось Apikaster; 11.08.2011 в 14:00.
Старый 11.08.2011, 18:46
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 6  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
1. Курсор ищет только в открытых ветках.
2. selectedItem и selectedIndex выделяют элемент, только в открытых ветках.

Вот пример рекурсивного поиска по иерархическим данным.

Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<s:Application name="Hierarchical Search"
               xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx">
    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.collections.HierarchicalCollectionView;
            import mx.collections.HierarchicalData;
            import mx.collections.ICollectionView;
            import mx.collections.IViewCursor;
 
            private var _data:HierarchicalCollectionView;
 
            private function get data():HierarchicalCollectionView
            {
                if (!_data)
                {
                    var dataSource:ArrayCollection = new ArrayCollection([
                        {label:"first", children: (new ArrayCollection([{label: "sub1"}, {label: "sub2"}]))},
                        {label:"second", children: (new ArrayCollection([{label: "sub1"}, {label: "sub2"}]))}
                    ]);
 
                    var hd:HierarchicalData = new HierarchicalData(dataSource);
                    var hcv:HierarchicalCollectionView = new HierarchicalCollectionView(hd);
                    _data = hcv;
                }
 
                return _data;
            }
 
            protected function searchButton_clickHandler(event:MouseEvent):void
            {
                if (searchInput.text != '')
                {
                    var regexp:RegExp = new RegExp(searchInput.text, "i");
                    var path:Array = findPath(regexp, data);
 
                    if (path)
                    {
                        while (path.length != 1)
                        {
                            //открываем все ветви до искомого элемента
                            dg.expandItem(path.shift(), true);
                        }
 
                        //выделяем искомый элемент
                        dg.selectedItem = path.shift();
                    }
                }
            }
 
 
            /**
            * Ищет путь до искомого элемента
            * 
            * @param regexp регулярное выражение для label
            * 
            * @param collection коллекция вида
            * <code>var dataSource:ArrayCollection = new ArrayCollection([
            *     {label:"first", children: (new ArrayCollection([{label: "sub1"}, {label: "sub2"}]))},
            *     {label:"second", children: (new ArrayCollection([{label: "sub1"}, {label: "sub2"}]))}
            * ]);</code>
            * 
            * @return массив вида [parent, parent, item]
            */
            private function findPath(regexp:RegExp, collection:ICollectionView):Array
            {
                var cursor:IViewCursor = collection.createCursor();
 
                if (!cursor.afterLast)
                {
                    do
                    {
                        var item:Object = cursor.current;
 
                        if (regexp.test(item.label))
                        {
                            return [item];
                        }
 
                        if (item.hasOwnProperty("children") && item.children is ICollectionView)
                        {
                            var child:Array = findPath(regexp, item.children);
 
                            if (child)
                            {
                                return [item].concat(child);
                            }
                        }
                    }
                    while (cursor.moveNext());
                }
                return null;
            }
        ]]>
    </fx:Script>
 
    <s:layout>
        <s:VerticalLayout/>
    </s:layout>
 
    <s:HGroup>
        <s:TextInput id="searchInput"/>
        <s:Button id="searchButton" label="search" click="searchButton_clickHandler(event)"/>
    </s:HGroup>
    <mx:AdvancedDataGrid id="dg" dataProvider="{data}" width="100%" height="100%">
        <mx:columns>
            <mx:AdvancedDataGridColumn dataField="label"/>
        </mx:columns>
    </mx:AdvancedDataGrid>
</s:Application>
__________________
משיח לא בא
משיח גם לא מטלפן


Последний раз редактировалось alatar; 22.08.2011 в 15:20.
Старый 19.08.2011, 17:38
Apikaster вне форума Посмотреть профиль Отправить личное сообщение для Apikaster Найти все сообщения от Apikaster
  № 7  
Ответить с цитированием
Apikaster

Регистрация: Sep 2010
Сообщений: 36
Благодарю за исходник...

Добавлено через 69 часов 35 минут
Но у меня двойной сорт.
В массиве у меня есть поле парент и поле айди.
И иерархия у меня строиться по паренту и айди.
Так что мне этот метод не прокатит.
Придется делать просто подуровневый аррей.
И с него искать.


Последний раз редактировалось Apikaster; 22.08.2011 в 15:14.
Старый 22.08.2011, 15:19
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 8  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Сортировка не важна. Это были рудименты, не относящиеся к поиску. Я их удалил.
__________________
משיח לא בא
משיח גם לא מטלפן

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:36.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:36.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.