2017-05-24 3 views
1

Ich verwende freie jqgrid 4.14. Ich habe ein Problem mit der vertikalen Bildlaufleiste im Baumraster. Ich habe eine Höhe für das Baumraster definiert. Wenn nun die Gitter geladen werden und ich versuche, sie zu erweitern, geschieht dies. enter image description hereVertikale Bildlaufleiste unter der letzten Spaltenbreite

Aber sobald ich die Größe des Fensters ändere, wird die Scrollbar-Breite nicht aus der letzten Spaltenbreite übernommen, sondern hat sie selbst. Siehe

enter image description here

Also, dachte ich an

beim Start Last vertikale Scrollbalken machen
.ui-jqgrid .ui-jqgrid-bdiv { overflow-y: scroll } 

aber dann auch ist es Breite von der Säule unter.

Ich lade Gitter mit diesen Einstellungen -

datatype: "jsonstring", 
    datastr: grid_data, 
    colNames: scopes.grid_header_column_value[grid_id], 
    colModel: scopes.gridcolumns[grid_id], 
    height: height, 
    viewrecords: is_pager_enable, 
    multiSort: true, 
    ignoreCase: true, 
    grouping: is_group_enable, 
    headertitles:true, 
    sortorder: sort_order, 
    sortable: false, 
    pager: "#" + pager_id, 
    treeGrid: true, 
    treeGridModel: 'adjacency', 
    treedatatype: "jsonstring", 
    ExpandColumn: 'name' 

Auch ich diese Eigenschaften beantrage -

$("#" + grid_id).closest('.ui-jqgrid-bdiv').width($("#" + grid_id).closest('.ui-jqgrid-bdiv').width() + 1); 
$(".ui-jqgrid-sortable").css('white-space', 'normal'); 
$(".ui-jqgrid-sortable").css('height', 'auto'); 
$(".ui-jqgrid tr.jqgrow td").css('white-space', 'normal'); 
$(".ui-jqgrid tr.jqgrow td").css('height', 'auto'); 
$("div.ui-jqgrid-sdiv").after($("div.ui-jqgrid-bdiv")); 

ich auch jqGridAfterLoadComplete Ereignis verwenden, so dass beim Laden auch führt sie die gleiche Operation Was sollte es in der Größenänderung von here

So wie kann die vertikale Bildlaufleiste zwingen, Breite von außerhalb des Rasters zu nehmen.

Update: hinzugefügt Bild nach der Lösung

enter image description here

Hier ist das Bild, das angibt, genau das, was ich will.

Hier ist die Scrollbar nicht erforderlich ist, aber noch ist es als leer initialisiert ohne Spalte unter Breite

enter image description here

Problem beim Ändern der Größe: ich jquery Ereignis verwenden, wenn die Fenstergröße verändert wird, so zu Größe der jqgrid nach dem Bildschirm, aber hier ist das Problem, wenn ich verkleinere das Fenster auf kleinere Bildschirm und erweitern Sie das Baumraster, Bildlaufleiste kommt. Der Code zum Ändern der Größe ist wie das ist -

$(window).bind('resize', function() { 
     resizeGrid.call($('#' + grid_id)); 
     }); 

resizeGrid = function() { 
     var newWidth = $(this).closest(".ui-jqgrid").parent().width(); 
     $(this).jqGrid("setGridWidth", newWidth, true); 
     }; 

Like this -

enter image description here

hier die Scrollbar haben besonders viel Platz und es ist außerhalb des gegebenen Raum kommen. Wenn ich nun das Fenster auf die volle Größe skaliere und alle Zeilen zusammenfalte, ist das leere für die Bildlaufleiste vorhanden.

Es sieht wie folgt aus -

enter image description here

Antwort

1

Versuchen Sie, den Rückruf treeGridAfterExpandRow mit dem folgenden Code hinzuzufügen:

treeGridAfterExpandRow: function() { 
    this.fixScrollOffsetAndhBoxPadding(); 
} 

Ich bin nicht sicher, dass ich genau verstehen, welches Verhalten Sie brauchen haben. Wahrscheinlich ist die Verwendung von zwei Rückrufen treeGridAfterExpandRow und treeGridAfterCollapseRow

treeGridAfterExpandRow: normalizeWidth, 
treeGridAfterCollapseRow: normalizeWidth 

mit normalizeWidth definiert als

var normalizeWidth = function() { 
     var $self = $(this), p = $self.jqGrid("getGridParam"); 
     this.fixScrollOffsetAndhBoxPadding(); 
     if (!p.autowidth && (p.widthOrg === undefined || p.widthOrg === "auto" || p.widthOrg === "100%")) { 
      $self.jqGrid("setGridWidth", p.tblwidth + p.scrollOffset, false); 
     } 
    }; 

wird mehr in der Nähe Ihrer Anforderungen. Der obige Code erweitert die Breite des TreeGrid auf die Breite der Bildlaufleiste, wenn die vertikale Bildlaufleiste sichtbar sein wird.

+0

Ich habe versucht, Ihre Lösung, aber ich bekomme nicht, was ist das Problem. Bei Baumraster wird die Breite so erhöht, dass das Gitter selbst ausschneidet. Ich poste ein Bild davon in Frage – shv22

+0

@ shv22: Ich verstehe immer noch nicht vollständig, was das aktuelle Problem ist. Wenn Sie den zweiten Weg verwenden (mit der Verwendung von 'normalizeWidth'), sollte die Bildlaufleiste wie auf Ihrem zweiten Bild aussehen (https://i.stack.imgur.com/bVhBH.png). Sie verwenden lokalen Datentyp. Dann wäre es besser, dass Sie die Demo (in JSFiddle) erstellen, die Ihr aktuelles Problem demonstriert. Ich könnte den Code der Demo ändern, damit es funktioniert. – Oleg

+0

@ shv22: Siehe die Demo https://jsfiddle.net/rs8d83w3/ – Oleg

Verwandte Themen