Comment obtenir une valeur de cellule jqGrid lors de l'édition

Comment obtenir une valeur de cellule jqGrid lors de l'édition en ligne (getcell et getRowData renvoie le contenu de la cellule et non la valeur actuelle de l'élément d'entrée).

31
demandé sur Gab 2009-11-21 16:44:03

23 réponses

fonction générale pour obtenir la valeur de la cellule avec la ligne donnée id et la cellule id

créer dans votre fonction de code js:

function getCellValue(rowId, cellId) {
    var cell = jQuery('#' + rowId + '_' + cellId);        
    var val = cell.val();
    return val;
}

exemple d'utilisation:

var clientId = getCellValue(15, 'clientId');

Douteux, mais qui fonctionne.

17
répondu Pawel 2016-04-11 19:20:35

Voici un exemple de solution de base avec une fonction utilisateur.

    ondblClickRow: function(rowid) {
        var cont = $('#grid').getCell(rowid, 'MyCol');
        var val = getCellValue(cont);
    }

...

function getCellValue(content) {
    var k1 = content.indexOf(' value=', 0);
    var k2 = content.indexOf(' name=', k1);
    var val = '';
    if (k1 > 0) {
        val = content.substr(k1 + 7, k2 - k1 - 6);
    }
    return val;
}
15
répondu raouf 2009-11-23 15:01:41

après de nombreuses heures de chagrin, j'ai trouvé que c'était la solution la plus simple. Appelez ceci avant de récupérer les données de la ligne:

$('#yourgrid').jqGrid("editCell", 0, 0, false);

il sauvera n'importe quelle édition courante et ne lancera pas s'il n'y a pas de lignes dans la grille.

6
répondu Aidan 2011-03-24 22:26:09

Comme vous l'avez dit, , selon le jqGrid documentation pour getCell et getRowData:

Ne pas utiliser cette méthode lorsque vous éditez la ligne ou la cellule. Cela retournera le contenu de la cellule et non la valeur réelle de l'élément d'entrée

Puisqu'aucune de ces méthodes ne retournera vos données directement, vous devrez les utiliser pour retourner le contenu de la cellule elle - même et puis le Parser, peut-être en utilisant jQuery. Ce serait bien si une future version de jqGrid pouvait fournir un moyen de procéder elle-même à cette analyse et/ou fournir une API pour la rendre plus simple. Mais d'un autre côté est-ce vraiment un cas d'utilisation qui revient souvent?

Sinon, si vous pouvez expliquer votre problème plus en détail, il peut y avoir d'autres options.

4
répondu Justin Ethier 2009-11-22 15:50:51

essayez ceci, il vous donnera la valeur particulière de la colonne

onSelectRow: function(id) {
    var rowData = jQuery(this).getRowData(id); 
    var temp= rowData['name'];//replace name with you column
    alert(temp);
}
4
répondu abi1964 2015-01-22 03:09:37

en gros, vous devez sauvegarder la rangée avant d'accéder au contenu de la cellule.

si vous le faites, alors vous obtenez la valeur pour la cellule au lieu du markup qui vient quand la cellule est en mode édition.

jQuery.each(selectedRows, function(index, foodId) {
            // save the row on the grid in 'client array', I.E. without a server post
            $("#favoritesTable").saveRow(foodId, false, 'clientArray'); 

            // longhand, get grid row based on the id
            var gridRow = $("#favoritesTable").getRowData(foodId);

            // reference the value from the editable cell
            foodData += foodId + ":" + gridRow['ServingsConsumed'] + ',';
        });
2
répondu David C 2010-09-30 14:51:06

Salut. j'ai rencontré ce problème aussi. Finalement j'ai résolu ce problème par jQuery. Mais la réponse est liée à la grille elle-même, pas une commune. Espérons que cela aide.

ma solution comme ceci:

var userIDContent = $("#grid").getCell(id,"userID");  // Use getCell to get the content
//alert("userID:" +userID);  // you can see the content here.

//Use jQuery to create this element and then get the required value.
var userID = $(userIDContent).val();  // var userID = $(userIDContent).attr('attrName');
2
répondu LLQ 2012-05-14 11:21:15

vous pouvez l'utiliser directement....

onCellSelect: function(rowid,iCol,cellcontent,e) {
            alert(cellcontent);
        }
1
répondu MuniR 2011-07-02 08:01:32

C'est ma solution:

                function getDataLine(grida, rowid){  //vykradeno z inineeditu a vohackovano

                    if(grida.lastIndexOf("#", 0) === 0){
                        grida = $(grida);
                    }else{
                        grida = $("#"+grida);
                    }

                    var nm, tmp={}, tmp2={}, tmp3= {}, editable, fr, cv, ind;

                    ind = grida.jqGrid("getInd",rowid,true);
                    if(ind === false) {return success;}
                    editable = $(ind).attr("editable");
                    if (editable==="1") {
                        var cm;
                        var colModel = grida.jqGrid("getGridParam","colModel") ;
                        $("td",ind).each(function(i) {
                            // cm = $('#mygrid').p.colModel[i];
                            cm = colModel[i];
                            nm = cm.name;
                            if ( nm != 'cb' && nm != 'subgrid' && cm.editable===true && nm != 'rn' && !$(this).hasClass('not-editable-cell')) {
                                switch (cm.edittype) {
                                    case "checkbox":
                                        var cbv = ["Yes","No"];
                                        if(cm.editoptions ) {
                                            cbv = cm.editoptions.value.split(":");
                                        }
                                        tmp[nm]=  $("input",this).is(":checked") ? cbv[0] : cbv[1]; 
                                        break;
                                    case 'text':
                                    case 'password':
                                    case 'textarea':
                                    case "button" :
                                        tmp[nm]=$("input, textarea",this).val();
                                        break;
                                    case 'select':
                                        if(!cm.editoptions.multiple) {
                                            tmp[nm] = $("select option:selected",this).val();
                                            tmp2[nm] = $("select option:selected", this).text();
                                        } else {
                                            var sel = $("select",this), selectedText = [];
                                            tmp[nm] = $(sel).val();
                                            if(tmp[nm]) { tmp[nm]= tmp[nm].join(","); } else { tmp[nm] =""; }
                                            $("select option:selected",this).each(
                                                function(i,selected){
                                                    selectedText[i] = $(selected).text();
                                                }
                                            );
                                            tmp2[nm] = selectedText.join(",");
                                        }
                                        if(cm.formatter && cm.formatter == 'select') { tmp2={}; }
                                        break;
                                }
                            }
                        });
                    }
                    return tmp;
                }
1
répondu hovno 2012-04-10 20:13:45

j'ai une solution: 1. L'utilisation de ce.valeur pour obtenir la valeur d'édition courante dans la ligne d'édition. 2. Sauvegardez la valeur de la cellule dans un champ caché lorsque la cellule a perdu sa focalisation. 3. Lire le champ caché quand vous en avez besoin.

le code:

 colModel="[
       { name: 'Net', index: 'Net', editable:true, editoptions: { dataEvents: [ { type: 'focusout', fn: function(e) {$('#HiddenNet').val(this.value);} }] }, editrules:{custom:true,}},
       { name: 'Tax', index: 'Tax', editable:true, editoptions: { dataEvents: [ { type: 'focus', fn: function(e) {this.value=$('#HiddenNet').val(); } }] }, editrules:{custom:true}}
    ]" 

Bonne Chance

1
répondu user2066558 2014-01-14 16:05:05

vous pouvez l'obtenir de la manière suivante...!!

var rowId =$("#list").jqGrid('getGridParam','selrow');  
var rowData = jQuery("#list").getRowData(rowId);
var colData = rowData['UserId'];   // perticuler Column name of jqgrid that you want to access
1
répondu Mitul Maheshwari 2014-02-18 12:15:05

dans mon cas, le contenu de ma cellule est HTML à la suite d'un formatteur. Je veux la valeur à l'intérieur de l'étiquette d'ancrage. En récupérant le contenu de la cellule et en créant ensuite un élément à partir du html via jQuery, je suis capable d'accéder ensuite à la valeur brute en appelant .texte() sur mon nouvellement créé élément.

var cellContents = grid.getCell(rowid, 'ColNameHere');
console.log($(cellContents)); 
//in my case logs <h3><a href="#">The Value I'm After</a></h3>

var cellRawValue = $(cellContents).text();
console.log(cellRawValue); //outputs "The Value I'm After!"

ma réponse est basée sur la réponse de @LLQ, mais puisque dans mon cas mes contenus cellulaires ne sont pas une entrée, j'ai dû utiliser .text() au lieu de .val() pour accéder à la valeur donc j'ai pensé que je voudrais poster ceci au cas où quelqu'un d'autre est à la recherche d'un moyen d'accéder à la valeur brute d'une cellule jqGrid formatée.

1
répondu timbrown 2014-04-18 21:19:55

son code d'écriture très simple dans votre grille.php et passer la valeur à une autre page.php

de cette façon, vous pouvez obtenir d'autres valeurs de cellules de colonne

mais n'importe qui peut faire une fenêtre semblable.open(chemin pour passer de la valeur....) dans la fantaisie ou de la boîte de clor boîte?

$custom = <<<CUSTOM
jQuery("#getselected").click(function(){

    var selr = jQuery('#grid').jqGrid('getGridParam','selrow'); 
    var kelr = jQuery('#grid').jqGrid('getCell', selr, 'stu_regno');
    var belr = jQuery('#grid').jqGrid('getCell', selr, 'stu_school');
    if(selr) 

     window.open('editcustomer.php?id='+(selr), '_Self');


    else alert("No selected row");
    return false;
});

CUSTOM;
$grid->setJSCode($custom); 
1
répondu zaheerprince 2014-07-08 02:47:49

je pense qu'une extension de l'obtenir pour vous. "151910920 de" récupération-original-ligne-données-de-jqgrid

0
répondu David 2017-05-23 12:17:02

je pense qu'une meilleure solution que d'utiliser getCell qui, comme vous le savez, renvoie du html en mode édition est d'utiliser jquery pour accéder directement aux champs. Le problème avec essayer d'analyser comme vous le faites est qu'il ne fonctionnera que pour les champs d'Entrée (pas les choses comme select), et il ne fonctionnera pas si vous avez fait quelques personnalisations aux champs d'entrée. Ce qui suit fonctionnera avec les entrées et sélectionnera les éléments et n'est qu'une ligne de code.

ondblClickRow: function(rowid) {
    var val = $('#' + rowid + '_MyCol').val();
}
0
répondu bigrockshow 2010-05-28 21:01:02

j'ai un chemin plutôt indirect. Vos données doivent avoir un identifiant unique.

tout d'abord, définir un formatteur

$.extend(true, $.fn.fmatter, {          
numdata: function(cellvalue, options, rowdata){
    return '<span class="numData" data-num="'+rowdata.num+'">'+rowdata.num+'</span>';
}
});

utilisez ce formatteur dans ColModel. Pour récupérer L'ID (par exemple une ligne sélectionnée)

var grid = $("#grid"), 
    rowId = grid.getGridPara('selrow'),
    num = grid.find("#"+rowId+" span.numData").attr("data-num");

(ou vous pouvez utiliser directement .data() pour la dernière version de jquery 1.4.4)

0
répondu jackysee 2010-12-01 08:24:24

pour obtenir la valeur de la cellule lors de l'édition en ligne, vous devez capturer cet événement(ou un autre événement similaire, cochez documentation ):

beforeSaveCell: function (rowid, celname, value, iRow, iCol) { }

dans le paramètre value vous avez la valeur de la cellule qui a été éditée.

pour obtenir le reste des valeurs dans la rangée utilisez getRowData ()

j'ai perdu un beaucoup de temps avec cela, espérons que cette aide.

0
répondu Cacho Santa 2011-03-10 19:12:32

ma solution consiste à attacher un objet contenant des valeurs initiales à chaque élément tr de la grille. J'ai utilisé afterAddRecord callback pour mettre la main sur les valeurs avant que jqGrid ne les jette et la méthode "data" de jQuery pour les stocker dans le travail.

exemple:

afterInsertRow: function( rowid, rowdata, rowelem ) {
  var tr = $("#"+rowid);
  $(tr).data("jqgrid.record_data", rowelem);
},

"rowelem" est le tableau de valeurs de cellule de notre JSON flux de données ou [jsonReader] (http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#jsonreader_as_function)

alors à tout moment je peux récupérer ces attributs en utilisant:

$(tr).data(“jqgrid.record_data”).

plus à: http://wojciech.oxos.pl/post/9423083837/fetching-original-record-values-in-jqgrid

0
répondu Wojtek Kruszewski 2011-08-26 19:34:16

je pense que la réponse D'Aidan est de loin la meilleure.

$('#yourgrid').jqGrid("editCell", 0, 0, false);

cette option vous permet d'accéder à la valeur réelle. Je le préfère parce que:

  • vous n'avez pas à coder toutes les références de cellules.
    • Il est particulièrement bien adapté à l'utilisation de getRowData() pour obtenir l'intégralité de la grille, comme il ne se soucie pas de qui de cellules que vous venez d'éditer.
    • Vous n'êtes pas en train d'essayer d'analyser un certain markup généré par jqGrid qui pourrait changer dans le futur.
    • si l'utilisateur sauvegarde, alors la fin de la session d'édition est probablement le comportement qu'il voudrait de toute façon.
0
répondu StuartQ 2012-03-14 05:56:30

avant que je n'obtienne : étiquette html de la boîte de texte quelque chose comme

Mais voici la solution pour obtenir la valeur de cette colonne particulière, de travail et testé

function getValue(rowId, cellId) {
        var val = $("[rowId='"+rowId+"'][name='"+cellId+"']").val();
        return val;
       }

var values = getValue(rowId, 'cellid');
0
répondu Pradeep nain 2016-04-29 03:26:43

j'obtiens la valeur d'édition en utilisant javascript:

document.getElementById ("idCell").valeur

j'espère que cette information utile pour quelqu'un.

0
répondu Ignacio Ayuste 2017-05-30 23:21:04

essayez de vous abonner à l'événement afterEditCell qu'il recevra (rowid, cellname, value, iRow, iCol) où la valeur est votre nouvelle valeur de votre cellule

-1
répondu Sergey 2009-12-18 02:32:17

Vous pouvez utiliser getCol pour obtenir les valeurs de colonne dans un tableau l'indice, puis par la ligne qui vous intéresse.

var col = $('#grid').jqGrid('getCol', 'Sales', false);

var val = col[row];
-2
répondu tvanfosson 2009-11-21 14:10:06