Quantcast
Channel: SmartClient Forums
Viewing all articles
Browse latest Browse all 4756

Case insensitive filter in ListGrid

$
0
0
Hi,

I'm using smartGWT Pro 4.0. Can you explain how I can use a case insensitive filter in ListGrid?

I’ve tried to reproduce showcase example http://www.smartclient.com/smartgwt/showcase/#grid_sortfilter_filter. Filter is working correctly (case insensitive) while number of rows less then 75. If rows more then 75 then filter works as case sensitive.

DataSource, name is CustomerView.ds.xml:
Code:

<DataSource
        dbName="Mysql"
        tableName="CustomerView"
        ID="CustomerView"
        serverType="sql"
>
 <operationBindings>
  <operationBinding requiresRole="Customerfetch" operationType="fetch" />
 </operationBindings>
        <fields>
                <field name="CustomerID" type="integer"></field>
                <field name="CustomerFName" length="50" type="text"></field>
                <field name="CustomerLName" length="50" type="text"></field>
                <field name="CustomerTel1" length="50" type="text"></field>
                <field name="CustomerEmail" length="250" type="text"></field>
                <field name="CustomerCanContact" type="integer"></field>
                <field name="TierName" length="100" type="text"></field>
                <field name="CustomerPointBalance" type="integer"></field>
        </fields>
</DataSource>

CustomerView.ds.js:
Code:

var CustomerView = {
    allowAdvancedCriteria:true,
    ID:"CustomerView",
    serverType:"sql",
    fields:[
        {
            name:"CustomerID",
            type:"integer",
            primaryKey:true
        },
        {
            name:"CustomerFName",
            length:50,
            type:"text",
            title:"First Name"
        },
        {
            name:"CustomerLName",
            length:50,
            type:"text",
            title:"Last Name",
            sort:true
        },
        {
            name:"CustomerEmail",
            length:250,
            type:"text",
            title:"Email"
        },
        {
            name:"CustomerTel1",
            length:50,
            type:"text",
            title:"Telephone"
        },       
        {
            name:"CustomerPointBalance",
            type:"integer",
            title:"Points"
        },
        {
            name:"CustomerCanContact",
            type:"boolean",
            title:"Can Contact"
        },
        {
            name:"TierName",
            length:100,
            type:"text",
            group:true,
            hidden:true
        }
    ]
}

Creating ListGrid:
Code:

private void drawListGrid() {
        // TODO add autoDisplayField to primField
        boolean isNew = listGrid == null;
        if (isNew) {
                listGrid = new ListGrid();
               
                listGrid.setHeight100();
                listGrid.setWidth100();

                listGrid.setCanEdit(false);
                listGrid.setShowFilterEditor(this.autoFetch);
                listGrid.setDataSource(getDataSourceView());
                listGrid.setAlternateRecordStyles(true);
                listGrid.setDataFetchMode(FetchMode.PAGED);

                String fieldWidth = ((int) (100 / getDataSourceView().getFields().length)) + "%";
                List<ListGridField> listGridFields = new ArrayList<ListGridField>();
                for (int i = 0; i < getDataSourceView().getFields().length; i++) {
                        final DataSourceField field = getDataSourceView().getFields()[i];
                        ListGridField lgf = new ListGridField(field.getName());
                       
                        listGridFields.add(lgf);
                }

                ListGridField[] lgf = new ListGridField[listGridFields.size()];
                lgf = listGridFields.toArray(lgf);
                listGrid.setFields(lgf);
                this.addMember(listGrid);
                listGrid.setFilterOnKeypress(true);
                listGrid.setAutoFetchData(true);
        }
}

I use following code to fetching data:
Code:

public void fetch() {
        if (fetchLocks.isEmpty()) {
                if (listGrid != null) {
                        if (extraCriteria.isEmpty()) {
                                listGrid.fetchData(criteria, new DSCallback() {
                                        @Override
                                        public void execute(DSResponse response, Object rawData, DSRequest request) {
                                                if (response.getStatus() == 0) {
                                                        Record[] data = response.getData();
                                                        RecordList filteredData = new RecordList(data);
                                                        listGrid.setData(filteredData);
                                                }
                                                listGrid.invalidateCache();
                                        }
                                });
                        } else {
                                getDataSourceView().filterData(criteria, new DSCallback() {
                                        @Override
                                        public void execute(DSResponse response, Object rawData, DSRequest request) {
                                                if (response.getStatus() == 0) {
                                                        Record[] data = response.getData();
                                                        RecordList filteredData = new RecordList();
                                                        for (Record r : data) {
                                                                for (Entry<String, Set<String>> crit : extraCriteria.entrySet()) {
                                                                        String val = r.getAttribute(crit.getKey());
                                                                        if (val != null) {
                                                                                if (crit.getValue().contains(val)) {
                                                                                        filteredData.add(r);
                                                                                        break;
                                                                                }
                                                                        }
                                                                }
                                                        }
                                                        listGrid.setData(filteredData);
                                                }

                                        }
                                });
                        }
                }
        }
}

Console logs:
Code:

    [java] === 2014-01-30 13:20:09,855 [l0-4] DEBUG DSRequest - Caching instance 30 of DS CustomerView from DSRequest.getDataSource()
    [java] === 2014-01-30 13:20:09,856 [l0-4] DEBUG RPCManager - Request #1 (DSRequest) payload: {
    [java]    criteria:{
    [java]        CustomerFName:"alex"
    [java]    },
    [java]    operationConfig:{
    [java]        dataSource:"CustomerView",
    [java]        operationType:"fetch",
    [java]        textMatchStyle:"substring"
    [java]    },
    [java]    startRow:0,
    [java]    endRow:75,
    [java]    sortBy:[
    [java]        "CustomerLName"
    [java]    ],
    [java]    componentId:"isc_ListGrid_0",
    [java]    appID:"builtinApplication",
    [java]    operation:"CustomerView_fetch",
    [java]    oldValues:{
    [java]        CustomerFName:"alex"
    [java]    }
    [java] }
    [java] === 2014-01-30 13:20:09,856 [l0-4] DEBUG DeclarativeSecurity - Processing security checks for DataSource null, field null
    [java] === 2014-01-30 13:20:09,856 [l0-4] DEBUG DeclarativeSecurity - DataSource CustomerView is not in the pre-checked list, processing...
    [java] === 2014-01-30 13:20:09,856 [l0-4] DEBUG AppBase - [builtinApplication.CustomerView_fetch] No userTypes defined, allowing anyone access to all opera tions for this application
    [java] === 2014-01-30 13:20:09,857 [l0-4] DEBUG AppBase - [builtinApplication.CustomerView_fetch] No public zero-argument method named '_CustomerView_fetch' found, performing generic datasource operation
    [java] === 2014-01-30 13:20:09,857 [l0-4] INFO  SQLDataSource - [builtinApplication.CustomerView_fetch] Performing fetch operation with
    [java]    criteria: {CustomerFName:"alex"}        values: {CustomerFName:"alex"}
    [java] === 2014-01-30 13:20:09,857 [l0-4] INFO  SQLDataSource - [builtinApplication.CustomerView_fetch] derived query: SELECT $defaultSelectClause FROM $defaultTableClause WHERE $defaultWhereClause ORDER BY $defaultOrderClause

Thanks

Viewing all articles
Browse latest Browse all 4756

Trending Articles