在DataGrid中搜索

时间:2016-01-25 23:44:15

标签: actionscript-3 flash search datagrid

我一直在与我过去编写的一些代码进行斗争并试图调整它。目前,我的搜索仅搜索匹配的单词的第一个字符。我需要更深入地搜索。例如,如果我在这个字符串中搜索行星:

"Earth is a planet"

我什么都没得到,但如果我在下一个字符串中搜索行星:

"Planet earth is amazing"

我得到数据网格以显示该行。

我希望能够搜索显示该行的单词,无论它是在字符串的开头还是在字符串的结尾。

有人可以帮帮我吗?提前谢谢。

import fl.controls.DataGrid;
import fl.controls.TextInput;
import fl.controls.dataGridClasses.DataGridColumn;
import fl.data.DataProvider;

var voddb:DataProvider = new DataProvider();
voddb.addItem({title:"Earth is a planet", detail:"ALE 0110"});
voddb.addItem({title:"Planet Earth", detail:"ALE 0210"});
voddb.addItem({title:"Jupiter is a planet", detail:"ALE 0310"});
voddb.addItem({title:"Aplanet Jupiter", detail:"ALE 0410"});
voddb.addItem({title:"Another amazing planet is mars", detail:"ALE 0510"});
voddb.addItem({title:"Planets include earth and mars:", detail: "ALE      0610"});

vodTextInput.addEventListener(Event.CHANGE, changeHandler);

var titleCol:DataGridColumn = new DataGridColumn("title");
titleCol.headerText = "Title";

var detailCol:DataGridColumn = new DataGridColumn("detail");
detailCol.headerText = "Details";
detailCol.sortOptions = Array.DESCENDING;

vodDataGrid.addColumn(titleCol);
vodDataGrid.addColumn(detailCol);
vodDataGrid.dataProvider = voddb;

function changeHandler(event : Event) : void 
{
    var arr : Array          = voddb.toArray();
    var filteredArr : Array  = arr.filter(filterDataProvider);
    vodDataGrid.dataProvider = new DataProvider(filteredArr);
}
function filterDataProvider(obj : Object, idx : String, arr : Array) : Boolean 
{
    var txt1 : String = vodTextInput.text;
    var txt2 : String = obj.title.substr(0, txt1.length);

    if (txt1.toLowerCase() == txt2.toLowerCase())
    {
        return true;
    }
    return false;
}

1 个答案:

答案 0 :(得分:2)

您可以使用indexOf搜索字符串。

function filterDataProvider(obj : Object, idx : int, arr : Array) : Boolean 
{
    var txt1 : String = vodTextInput.text.toLowerCase();
    var txt2 : String = obj.title.toLowerCase();
    return txt2.indexOf(txt1) >= 0;
}