1. #1
    Sencha User
    Join Date
    Nov 2012
    Posts
    14
    Answers
    1
    Vote Rating
    0
    travelbug is on a distinguished road

      0  

    Default Answered: How to sort case-insensitive when using addSortInfo

    Answered: How to sort case-insensitive when using addSortInfo


    I would like to sort my treestore so I tried the following. The problem was it sorted case-sensitive so how can I sort it case-insensitive?

    store.addSortInfo(new StoreSortInfo<BaseDto>(props.name(), SortDir.ASC));

  2. The default uses the standard Comparable.compareTo sort, which for String (your property is a String) is case sensitive. StoreSortInfo has other constructors, including one that takes a Comparator, allowing you to specify how you want the sort to be performed:

    Code:
    store.addSortInfo(new StoreSortInfo<BaseDto>(props.name(), new CaseInsensitiveComparator(),  SortDir.ASC))
    
    //...
    public class CaseInsensitiveComparator implements Comparator<String>() {
      public int compare(String o1, String o2) {
        //implement logic here - here's what it could look like:
        return o1.toLowerCase().compareTo(o2.toLowerCase());
      }
    }

  3. #2
    Sencha - GXT Dev Team
    Join Date
    Feb 2009
    Location
    Minnesota
    Posts
    2,634
    Answers
    107
    Vote Rating
    80
    Colin Alworth is just really nice Colin Alworth is just really nice Colin Alworth is just really nice Colin Alworth is just really nice Colin Alworth is just really nice

      0  

    Default


    The default uses the standard Comparable.compareTo sort, which for String (your property is a String) is case sensitive. StoreSortInfo has other constructors, including one that takes a Comparator, allowing you to specify how you want the sort to be performed:

    Code:
    store.addSortInfo(new StoreSortInfo<BaseDto>(props.name(), new CaseInsensitiveComparator(),  SortDir.ASC))
    
    //...
    public class CaseInsensitiveComparator implements Comparator<String>() {
      public int compare(String o1, String o2) {
        //implement logic here - here's what it could look like:
        return o1.toLowerCase().compareTo(o2.toLowerCase());
      }
    }

  4. #3
    Sencha User
    Join Date
    Nov 2012
    Posts
    14
    Answers
    1
    Vote Rating
    0
    travelbug is on a distinguished road

      0  

    Default


    That worked nicely. Thank you!

  5. #4
    Sencha User
    Join Date
    Apr 2013
    Posts
    4
    Vote Rating
    0
    mpavlis is on a distinguished road

      0  

    Default Another way

    Another way


    I had the similiar issue and i'm new to sencha, I searched around fro a few hours and tried several things. Frustrated I decided just to change the Ext.Data.Proxy.SQL.JS file. I'm my opinion, I think all string comparision should be case insensative by default.

    Changes I made are in red.


    selectRecords: function(transaction, params, callback, scope) { var me = this, table = me.getTable(), idProperty = me.getModel().getIdProperty(), sql = 'SELECT * FROM ' + table, records = [],
    filterStatement = ' WHERE ',

    sortStatement = ' ORDER BY UPPER(',


    i, ln, data, result, count, rows, filter, sorter, property, value; result = new Ext.data.ResultSet({ records: records, success: true }); if (!Ext.isObject(params)) { sql += filterStatement + idProperty + ' = ' + params; } else { ln = params.filters && params.filters.length; if (ln) { for (i = 0; i < ln; i++) { filter = params.filters[i]; property = filter.getProperty(); value = filter.getValue(); if (property !== null) { sql += filterStatement + property + ' ' + (filter.getAnyMatch() ? ('LIKE \'%' + value + '%\'') : ('= \'' + value + '\'')); filterStatement = ' AND '; } } } ln = params.sorters && params.sorters.length; if (ln) { for (i = 0; i < ln; i++) { sorter = params.sorters[i]; property = sorter.getProperty(); if (property !== null) {

    sql += sortStatement + property + ') ' + sorter.getDirection();

    sortStatement = ', '; } } } // handle start, limit, sort, filter and group params if (params.page !== undefined) { sql += ' LIMIT ' + parseInt(params.start, 10) + ', ' + parseInt(params.limit, 10); } } transaction.executeSql(sql, null, function(transaction, resultSet) { rows = resultSet.rows; count = rows.length; for (i = 0, ln = count; i < ln; i++) { data = rows.item(i); records.push({ clientId: null, id: data[idProperty], data: data, node: data }); } result.setSuccess(true); result.setTotal(count); result.setCount(count); if (typeof callback == 'function') { callback.call(scope || me, result); } }, function(transaction, errors) { result.setSuccess(false); result.setTotal(0); result.setCount(0); if (typeof callback == 'function') { callback.call(scope || me, result); } } ); },
    Last edited by mpavlis; 2 May 2013 at 6:20 AM. Reason: The format was destroyed after save

film izle

hd film izle

film sitesi

takipci kazanma sitesi

takipci kazanma sitesi

güzel olan herşey

takipci alma sitesi

komik eğlenceli videolar