Versteckte Spalten in jqGrid

Lesezeit: 3 Minuten

Benutzer-Avatar
maxpower47

Gibt es eine Möglichkeit, eine Spalte in einer jqGrid-Tabelle auszublenden, sie jedoch als schreibgeschützt anzuzeigen, wenn die Zeile im modalen Dialogfeld des Formulareditors bearbeitet wird?

Diese Funktion ist in jqGrid integriert.

Richten Sie Ihre Rasterfunktion wie folgt ein.

$('#myGrid').jqGrid({
   ...
   colNames: ['Manager', 'Name', 'HiddenSalary'],
   colModel: [               
               { name: 'Manager', editable: true },
               { name: 'Price', editable: true },
               { name: 'HiddenSalary', hidden: true , editable: true, 
                  editrules: {edithidden:true} 
               }
             ],
   ...
};

Es gibt andere Bearbeitungsregeln, die angewendet werden können, aber diese Grundeinstellung würde das Gehalt des Managers in der Rasteransicht verbergen, aber eine Bearbeitung ermöglichen, wenn das Bearbeitungsformular angezeigt wird.

  • Das ist fast das, wonach ich suche, außer ich möchte nicht, dass es im Bearbeitungsformular bearbeitet werden kann. Ich denke, es gibt keine Möglichkeit, das zu tun.

    – maxpower47

    17. November 2009 um 12:32 Uhr

Benutzer-Avatar
Chris

Ich möchte mich nur erweitern Königin3‘s Vorschlag, das Anwenden des Folgenden macht den Trick:

editoptions: { 
              dataInit: function(element) { 
                          $(element).attr("readonly", "readonly"); 
                        } 
             }

Szenario 1:

  • Das Feld muss im Raster sichtbar sein
  • Feld muss im Formular sichtbar sein
  • Das Feld muss schreibgeschützt sein

Lösung:

colModel:[
        {  name:'providerUserId',
               index:'providerUserId', 
               width:100,editable:true, 
               editrules:{required:true}, 
               editoptions:{ 
                            dataInit: function(element) { 
                                  jq(element).attr("readonly", "readonly"); 
                             } 
                           }
            },
],

Die providerUserId ist im Raster und beim Bearbeiten des Formulars sichtbar. Sie können den Inhalt jedoch nicht bearbeiten.


Szenario Nr. 2:

  • Feld darf im Raster nicht sichtbar sein
  • Feld muss im Formular sichtbar sein
  • Das Feld muss schreibgeschützt sein

Lösung:

colModel:[
           {name:'providerUserId',
            index:'providerUserId', 
            width:100,editable:true, 
            editrules:{
                         required:true, 
                         edithidden:true
                      },
            hidden:true, 
            editoptions:{ 
                  dataInit: function(element) {                     
                             jq(element).attr("readonly", "readonly"); 
                          } 
                     }
         },
        ]

Beachten Sie, dass ich in beiden Fällen jq verwende, um auf jquery zu verweisen, anstelle des üblichen $. In meinem HTML habe ich das folgende Skript, um die von jQuery verwendete Variable zu ändern:

<script type="text/javascript">
    var jq = jQuery.noConflict();
</script>

  • hervorragende Erklärung mit Szenarien .. !! +1

    – Anuj Patel

    24. Januar 2012 um 9:30 Uhr

Sie können den folgenden Code verwenden, um eine Tabellenspalte auszublenden.

JQuery("tableName").hideCol("colName");

Und Sie können den folgenden Code verwenden, um es erneut anzuzeigen.

JQuery("tableName").showCol("colName");

Für Ihre Frage können Sie den Code hideCol() für document.ready() aufrufen und den Code showCol() an das Ereignis edit/click des Dialogfelds binden.

  • Sie werden wahrscheinlich auch den Code von hideCol() in ein Ereignis binden wollen, das dem Abschluss der Bearbeitung entspricht oder wenn der Benutzer/Bearbeiter die Bearbeitung durchführt.

    – Anthony M. Powers

    2. November 2009 um 15:17 Uhr

Dieser Thread ist ziemlich alt, nehme ich an, aber falls jemand anderes über diese Frage stolpert … Ich musste einen Wert aus der ausgewählten Zeile einer Tabelle abrufen, aber ich wollte nicht die Spalte anzeigen, aus der diese Zeile stammte. Ich habe hideCol verwendet, hatte aber das gleiche Problem wie Andy, wo es unordentlich aussah. Um es zu beheben (nennen wir es einen Hack), habe ich einfach die Breite des Gitters neu eingestellt.

jQuery(document).ready(function() {

       jQuery("#ItemGrid").jqGrid({ 
                ..., 
                width: 700,
                ...
        }).hideCol('StoreId').setGridWidth(700)

Da meine Zeilenbreiten automatisch sind, wenn ich die Breite der Tabelle zurücksetze, wurden die Spaltenbreiten zurückgesetzt, aber die ausgeblendete ausgeschlossen, sodass sie die Lücke füllten.

Versuchen Sie, edithidden: true zu verwenden, und tun Sie es auch

editoptions: { dataInit: function(element) { $(element).attr("readonly", "readonly"); } }

Oder sehen Sie sich das jqGrid-Wiki für die benutzerdefinierte Bearbeitung an. Sie können jeden Eingabetyp einrichten, sogar Label, denke ich.

Benutzer-Avatar
Flexo

Zum Ausblenden der Rasterspalte

jQuery("#validGrid").jqGrid('hideCol',str);

Benutzer-Avatar
Troels

Es ist ein bisschen alt, dieser Beitrag. Aber das ist mein Code zum Ein-/Ausblenden der Spalten. Ich verwende die eingebaute Funktion, um die Spalten anzuzeigen und sie einfach zu markieren.

Funktion, die eingeblendete/ausgeblendete Spalten anzeigt. Das #jqGrid ist der Name meines Grids und der columnChooser ist der jqGrid-Spaltenwähler.

  function showHideColumns() {
        $('#jqGrid').jqGrid('columnChooser', {
            width: 250,
            dialog_opts: {
                modal: true,
                minWidth: 250,
                height: 300,
                show: 'blind',
                hide: 'explode',
                dividerLocation: 0.5
            } });

1283400cookie-checkVersteckte Spalten in jqGrid

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy