2013-04-25 11 views
5

Mam jqgrid. Zgrupowałem kilka wierszy na podstawie wartości kolumny. demo Praca jest dostępna w link części kodu, który definiuje jqGridjqGrid sortowanie kolumny podczas grupowania rozważ nagłówek grupowania

var preclosingtable = $('#preclosing'); 
    preclosingtable.jqGrid({ 
     datatype: 'local', 
     data: data.DOCS, 
     colNames: ['', 'Documents Received', 'Comments', 'NA', 'DocGroup'], 
     colModel: [ 
     { name: 'Documents', index: 'Documents', align: 'left', sortable: false, editable: false, width: 20 }, 
     { name: 'DocsReceived', index: 'DocsReceived', align: 'center', sortable: false, editable: true, edittype: 'checkbox', editoptions: { value: "True:False" }, formatter: "checkbox", width: 140 }, 
     { name: 'Comments', index: 'Comments', align: 'center', sortable: false, editable: true, edittype: "textarea", editoptions: { rows: "3", cols: "16" }, width: 180 }, 
     { name: 'NA', index: 'NA', editable: true, formatter: 'dynamicText', width: 150, edittype: 'custom', editoptions: { custom_element: radioelem, custom_value: radiovalue} }, 
      { name: 'DocGroup', index: 'DocGroup', editable: false, width: 1 } 
     ], 
     rowNum: data.DOCS.length, 
     //rowList: [10, 20, 30], 
     pager: '#preclosingpagerdiv', 
     viewrecords: true, 
     sortorder: "asc", 
     sortname: 'Documents', 
     grouping: true, 
     groupingView: { 
      groupField: ['DocGroup'], 
      groupColumnShow: [false], 
      groupDataSorted: true, 
      groupOrder : 'asc' 
     }, 
     localReader: { 
      id: 'ConfigId' 
     }, 
     shrinkToFit: false, 
     height: 'auto', 
     loadComplete: function() { 
      HideGroupHeaders(this); 
     }, 
     onSelectRow: function (id) { 
      preclosingtable.jqGrid('saveRow', previouslyselectedRow, false, 'clientArray'); 
      previouslyselectedRow = SetJQGridRowEdit(id, previouslyselectedRow, preclosingtable); 
     } 
    }); 

Poniżej jak moja siatka wygląda jqGrid after grouping

Problem: Czy jest możliwe aby posortować wiersze w tej siatki tak, że ostateczna siatka zawiera wiersze w następującym porządku

  • Alabama
  • D
  • Maine
  • NewJersey
  • Q
  • Virginia

Odpowiedz

10

Gdybym poprawnie zrozumieć swój problem można rozwiązać problemu poprzez dodanie funkcji sortowania niestandardowego (patrz here, here i here) na kolumnie DocGroup gdzie można zrobić grupowanie:

sorttype: function (cellvalue, rowObject) { 
    return cellvalue? cellvalue : rowObject.Documents; 
} 

w wyniku dane wejściowe, które mają pustą DocGroup zostanie posortowane i pogrupowane według Documents. będzie widać wyniki na Fiddle

enter image description here

+0

Dzięki @Oleg. Zadziałało. – fcmaine

+1

@SrinivasPotluri: Nie ma za co! Jedna wspólna uwaga: należy bardziej aktywnie głosować. W ciągu 11 miesięcy skorzystałeś z prawa tylko 5 razy. Głosowanie jest głównym kryterium wyszukiwarki, ponieważ chodzi o to, że * użytkownicy stackoverflow * decydują, które informacje (odpowiedzi lub pytania) są * pomocne *. Masz prawo głosować na 30 pytań lub odpowiedzi ** dziennie ** (patrz [tutaj] (http://meta.stackexchange.com/a/5213/147495)). Więc jeśli zobaczysz jakieś informacje na temat stackoverflow, które znajdziesz * pomocne * i ** jeśli chcesz pomóc innym użytkownikom znaleźć informacje, powinieneś zagłosować **. – Oleg

+0

@ O mnie myślałem, że musi być lepszy sposób na zrobienie tego :) Miałem silne podejrzenie, że przyjdziesz na to pytanie i dostarczysz o wiele lepszą odpowiedź niż moja! – Mark

1

Dwie rzeczy przychodzą mi do głowy, można utworzyć nowy wiersz, aby posortować w siatce. Nie umieszczaj żadnych danych w tej kolumnie po stronie serwera, a następnie dodaj dane do kolumny w funkcji beforeProcessing w jqGrid.

W funkcji beforeProcessing można przetestować dane grupowania i użyć pierwszych znaków do wypełnienia tej kolumny, a następnie, jeśli wartość jest pusta (dla powyższych przykładów D, Q), należy użyć tych wartości.

Oto funkcja beforeProcessing które można wykorzystać jako podstawę do wypełnienia tej kolumny, które będą następnie posortować na:

 beforeProcessing: function (data, status, xhr) { 
      for (var x = 0, length = data.rows.length; x < length; x++) { 
       var valueToPutInSortColumn = .... 
       data.rows[x].cell.splice(sortColumnIndex, 0, valueToPutInSortColumn); 
      } 
     .... 
Powiązane problemy