2011-11-28 31 views
5

jqGrid ızgaram için bir filtre kullanıyorum ve veriler gruplandırılmış, ilk önce daraltılmış durumu varsayılan. Bir kullanıcı bir grup veya 2 açarsa (grupları genişletirse), filtre yapar, ızgara verileri yeniden yükler, doğru şekilde filtreler, ancak kullanıcının açtığı grupların genişletilmiş halini kaybederim. Bir filtreye sahip olmamanın bir yolu var mı, bir filtre yaparken varsayılan duruma düşmek mi?jqGrid Filtrelenirken gruplandırma durumu

Teşekkürler.

cevap

2

Sorunuzu ilginç buluyorum. Yani benden +1. Gereksinimlerinizi nasıl uygulayacağınızı gösteren bir demo yaptım.

Uygulamanın ana fikri, the answer ile aynıdır. Ben sadece genişletilmiş grupların durumunu expandedGroups dizisinde tutmanızı öneriyorum. JqGrid 4.0.0'da onClickGroup geri arama özelliğini kullanıyorum (bkz. here). loadComplete geri arama içinde expandedGroups dizisinden tüm öğeleri genişletmeye çalışıyorum.

Uygulamanın avantajı, genişletilmiş durumun sayfalama, sıralama ve filtreleme sırasında kaybolmamasıdır.

Demoyu here görebilirsiniz. demo dan kodunda Aşağıda:

var $grid = $("#list"), expandedGroups = []; 

$grid.jqGrid({ 
    // ... some jqGrid parameters 
    grouping: true, 
    groupingView: { 
     groupField: ['name'], 
     groupCollapse: true, 
     groupDataSorted: true 
    }, 
    onClickGroup: function (hid, collapsed) { 
     var idPrefix = this.id + "ghead_", id, groupItem, i; 
     if (hid.length > idPrefix.length && hid.substr(0, idPrefix.length) === idPrefix) { 
      id = hid.substr(idPrefix.length); 
      groupItem = this.p.groupingView.sortnames[0][id]; 
      if (typeof (groupItem) !== "undefined") { 
       i = $.inArray(expandedGroups[i], groups); 
       if (!collapsed && i < 0) { 
        expandedGroups.push(groupItem); 
       } else if (collapsed && i >= 0) { 
        expandedGroups.splice(i, 1); // remove groupItem from the list 
       } 
      } 
     } 
    }, 
    loadComplete: function() { 
     var $this = $(this), i, l, index, groups = this.p.groupingView.sortnames[0]; 
     for (i = 0, l = expandedGroups.length; i < l; i++) { 
      index = groups.indexOf(expandedGroups[i]); 
      if (i >= 0) { 
       $this.jqGrid('groupingToggle', this.id + 'ghead_' + index); 
      } 
     } 
    } 
}); 
$grid.jqGrid('navGrid', '#pager', {add: false, edit: false, del: false}, {}, {}, {}, 
    {multipleSearch: true, multipleGroup: true, closeOnEscape: true, showQuery: true, 
     closeAfterSearch: true}); 

GÜNCELLEME: jqGrid gruplandırılması modülü orijinal cevap beri birçok yerinde değiştirilir. Modifiye demo bir here bulabilirsiniz. kod en önemli kısmı bir dış kapsamında tanımlanan

grouping: true, 
groupingView: { 
    groupField: ["invdate"], 
    groupCollapse: true, 
    groupDataSorted: true 
}, 
onClickGroup: function (hid, collapsed) { 
    var idPrefix = this.id + "ghead_", i, groupid, 
     $this = $(this), 
     groups = $(this).jqGrid("getGridParam", "groupingView").groups, 
     l = groups.length; 

    if (!inOnClickGroup) { 
     inOnClickGroup = true; // set to skip recursion 
     for (i = 0; i < l; i++) { 
      groupid = idPrefix + groups[i].idx + "_" + i; 
      if (groupid !== hid) { 
       $this.jqGrid("groupingToggle", groupid); 
      } 
     } 
     inOnClickGroup = false; 
    } 
} 

değişken inOnClickGroup aşağıda Kullanılan.

+0

Çok teşekkür ederim, Bunu çalışmak biraz zaman alacaktı, ama tecrübem bu çekirdekten sınırlı. Çok basit, ama herkes orada uzmanlıklardan yararlanırsa, topluluğa yardım eder. Zamanımı kurtardığın için teşekkürler, aynı şekilde başkalarına yardım etmeyi umuyorum. –

+0

@ D-S: Rica ederim! – Oleg

+0

Harika bir soru ve harika cevap! – FastTrack