Подскажите пожалуйста как можно реализовать поиск в DataGrid c возможностью выделения нескольких строк?
В примере показанном чуть ниже, реализован поиск по таблице, но если искомых значений несколько, то выделяется последняя искомая строчка.
Содержимое файла *.fla:
Код AS3:
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.MouseEvent;
import fl.controls.DataGrid;
import fl.data.DataProvider;
import fl.controls.dataGridClasses.DataGridColumn;
var urlLoader:URLLoader = new URLLoader();
//XML для вывода в таблицу
var DgXML:XML = new XML();
var DgXMLURL:URLRequest = new URLRequest("baseToDg.xml");
var DgLoader:URLLoader = new URLLoader(DgXMLURL);
DgLoader.addEventListener("complete", xmlToDgLoaded);
var aDp:DataProvider = new DataProvider(DgXML) ;
aDg.dataProvider = aDp;
function xmlToDgLoaded(event:Event):void
{
DgXML = XML(DgLoader.data);
aDg.removeAllColumns();
aDg.addColumn(new DataGridColumn("room"));
aDg.addColumn(new DataGridColumn("post"));
aDg.addColumn(new DataGridColumn("fio"));
aDg.addColumn(new DataGridColumn("inPhone"));
aDg.columns[0].headerText = "Отдел";
aDg.columns[1].headerText = "Должность";
aDg.columns[2].headerText = "ФИО";
aDg.columns[3].headerText = "Внутренний";
aDg.columns[0].width = 150;
aDg.columns[1].width = 150;
aDg.columns[2].width = 250;
aDg.columns[3].width = 100;
updateDG();
}
function updateDG():void
{
var converter:Array = [];
for (var i:int = 0; i < DgXML.children().length(); i++)
{
converter.push(
{
room:DgXML.user[i].@room,
post:DgXML.user[i].@post,
fio:DgXML.user[i].@fio,
inPhone:DgXML.user[i].@inPhone
});
}
aDg.dataProvider = new DataProvider(converter);
}
//Функция поиска//
btn.addEventListener(MouseEvent.CLICK, search);
function search(event:MouseEvent):void
{
for (var i:int = 0; i <aDg.length; i ++)
{
var array:Array = [i];
if ((aDg.getItemAt(i).fio == txt.text)||
(aDg.getItemAt(i).post == txt.text)||
(aDg.getItemAt(i).room == txt.text)||
(aDg.getItemAt(i).inPhone == txt.text)
)
{
//выделяет только последнюю искомую запись если их несколько
aDg.selectedIndices = array;
//выделяет несколько записей, но массив тут задан ручками
//aDg.selectedIndices = [1,2,3];
trace("-------");
}
}
}
Для выделения нескольких строк можно использовать следующий вариант:
//aDg.selectedIndices = [1,2,3];
В приложение есть архив с файлами *.fla и *.xml