2017-01-27 2 views
1

У меня есть несколько строк я прячу так:Сортировка отображения столбца скрытых строк в jqGrid

$("#"+rowid).hide(); 

Моя проблема заключается в том, что, когда пользователь нажимает кнопку для сортировки colmun, скрытые строки вновь. Есть ли способ избежать этого?

EDIT

Я попытаюсь объяснить немного больше того, что я сделал с примером кода. Я начинаю создавать свою сетку с этими параметрами (и без данных).

var params = { 
    datatype: "local", 
    data: [], 
    caption: "Grid", 
    colNames:[ "Column A", "Column B" ], 
    colModel:[ 
     { name:"colA", key: true }, 
     { name:"colB" } 
    ] 
}; 

По некоторым причинам, я перезагружать рядом сетки с DATAS, как это:

$("#myGrid").jqGrid("clearGridData") 
     .jqGrid("setGridParam", { data: myDatas }) 
     .trigger("reloadGrid"); 

И я флажков со слушателями, как этот:

$("#checkbox1").on("change", onCheckbox1Changed); 

function onCheckbox1Changed() { 
    var rowid = ...; 
    var datas = $("#myGrid").jqGrid("getRowData"); 

    for(var key in datas) { 
    if(datas[keys].colB === "" && $("#checkbox1").val() === true) { 
     $("#"+rowid).show(); 
    } else if(datas[keys].colB === "" && $("#checkbox1").val() === false) { 
     $("#"+rowid).hide(); 
    } 
    } 
} 

Этот код работает как я хочу. Строки скрыты/показаны в зависимости от флажков. Проблема заключается в том, что когда я clik на столбце, чтобы отсортировать его, скрытые столбцы снова появились.

EDIT 2

Я мог заставить сетку, чтобы скрыть строки после сортировки. Но я не нашел, где я могу найти такое событие, как «afterSort». Существует «onSortCol», но он вызывается перед сортировкой.

Решение будет заключаться в том, чтобы использовать «loadComplete». Например:

var params = { 
    // ... 
    loadComplete: onLoadComplete 
} 

function onLoadComplete() { 
    onCheckbox1Changed(); 
} 

Я пробовал, и он работает. Но я не очень «поклонник» с этим решением.

+0

Какие критерии вы используете для выбора строк, которые вам нужно скрыть? Где вы получаете/удерживаете соответствующие ряды? В какой части кода вы скрываете строки? Какую версию jqGrid вы используете (можете использовать) и из которой вилка jqGrid ([free jqGrid] (https://github.com/free-jqgrid/jqGrid), коммерческая [Guriddo jqGrid JS] (http: // guriddo. net /? page_id = 103334) или старый jqGrid в версии <= 4.7)? – Oleg

+0

Я использую бесплатный jqGrid в версии 4.6. Я не могу его изменить. – Stalyon

+0

Что касается вашего кода и других вопросов, которые я вам задал? – Oleg

ответ

1

Я нахожу скрывать некоторые строки после отображения страницы данных не лучший выбор. Основным недостатком является количество строк, которые будут отображаться. Вы можете безопасно использовать метод $("#"+rowid).hide(); внутри loadComplete, только если вам нужно отобразить одну страницу данных. Даже в этом случае можно увидеть некорректную информацию. Например, можно использовать опцию viewrecords: true, которая помещает текст как «View 1 - 10 of 12» в правую часть пейджера.

Я лично рекомендовал бы фильтровать данные. Вам нужно добавить search: true опции к сетке и указать postData.filters, которые исключает некоторые строки из отображения:

search: true, 
postData: { 
    filters: { 
     groupOp: "AND", 
     rules: [ 
      { field: "colA", op: "ne", data: "rowid1" }, 
      { field: "colA", op: "ne", data: "rowid2" } 
     ] 
    } 
} 

Если бы перейти от старого jqGrid 4.6 до текущей версии (4.13.6) свободного jqGrid, то вы можете использовать "ni" (NOT IN) операции:

search: true, 
postData: { 
    filters: { 
     groupOp: "AND", 
     rules: [ 
      { op: "ni", field: "id", data: "rowid1,rowid2" } 
     ] 
    } 
} 

В обоих случаях jqGrid будет первым фильтровать локальные данные, основанные на правилах фильтрации, а затем он будет отображать текущую страницу данных. В результате вы получите отличные результаты.

Сортировка такой сетки не изменяет фильтр.

0

Не скрывать столбцы после создания таблицы, скрыть их непосредственно при создании сетки, используя опцию hidden, как это:

colNames: ['Id', ...], 
colModel: [ 
    { key: true, hidden: true, name: 'Id', index: 'Id' }, 
    .... 
] 

Если вы хотите, чтобы скрыть столбцы на конкретные события после того, как создание сетки, посмотрите на статью this.

Надеюсь, это был вы искали.

+0

Спасибо за ваш ответ. Но это не столбцы, которые я скрываю, это строки. Я скрываю это в зависимости от некоторых событий. – Stalyon