![]() |
|
||||||||||
|
|||||
|
Регистрация: Sep 2010
Сообщений: 36
|
Доброе время суток друзья ...
У меня проблема ... Сделал иерархическое дерево в адвансед дата гриде ... Написал к нему сорт ... (вписываете слово в текст филд, и если слово таковое есть то он чтобы его находил) Чтобы он внутри иерархий искал вписанный в текст филд слово ... И обрывался при нахождение такого слова (вписанного в текст филде) ... (беик) Но проблема встала в следующем ... Он нашел ... И сработал брейк ... Таблица вся открылась ... Но теперь как сделать так чтобы он перешел на тот объект который найден (у которого текст в гриде соответствует вписанному в текс филде слову)? И чтобы пользователь понял что вписанный объект найден и видел что он выбран ... Я использовал в начале другой сорт но он убирал все другие записи и находил именно одну или несколько которые соответствует вписанному слову в текст филде , но таковой вариант их не устроил ... А так данная таблица раскрывается и где то внизу с прокруткой можно найти соответствие ... Помогите ... Прошу ... А то я уже измучился с этой задачей ... Последний раз редактировалось Apikaster; 10.08.2011 в 16:00. |
|
|||||
|
Apikaster, поменьше эмоций, больше внятной речи. Точка пишется так ".", а не так "...". Пробел ставиться после запятой, а не перед.
Цитата:
У AdvancedDataGrid есть свойство selectedItem, сортировка тут, вообще к делу не относится.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 36
|
Цитата:
Давайте я вам попробую объяснить. В гриде у меня есть столбец нейм. И по нему я ищу соответствующее наименование. Как думаете? Надо сначала найти индекс, и после поставить на него селектед индекс? Последний раз редактировалось Apikaster; 11.08.2011 в 09:51. |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 36
|
Я пробовал найти индекс. Но как видно иерархическая таблица не понимает понятия selectedIndex. А selectedItem почему то не переходит. Я использовал понятие курсор, чтобы искать внутри иерархической таблицы. Может из-за этого?
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(); } } ADG это у меня AdvancedDataGrid. Последний раз редактировалось Apikaster; 11.08.2011 в 14:00. |
|
|||||
|
1. Курсор ищет только в открытых ветках.
2. selectedItem и selectedIndex выделяют элемент, только в открытых ветках. Вот пример рекурсивного поиска по иерархическим данным. <?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. |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 36
|
Благодарю за исходник...
Добавлено через 69 часов 35 минут Но у меня двойной сорт. В массиве у меня есть поле парент и поле айди. И иерархия у меня строиться по паренту и айди. Так что мне этот метод не прокатит. Придется делать просто подуровневый аррей. И с него искать. Последний раз редактировалось Apikaster; 22.08.2011 в 15:14. |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:35. |
|
|
« Предыдущая тема | Следующая тема » |
|
|