2010-12-20 6 views
3

Je souhaite appliquer manuellement la recherche à mon jqGrid via JavaScript. J'ai essayé un guide here, mais n'arrive pas à le faire fonctionner complètement. Dans la configuration de la grille, j'ai une colonne avec le nom 'error_column' que je voudrais effectuer une recherche sur la recherche de la chaîne 'Test'.jqGrid recherche côté client

Voici ce que j'ai jusqu'à présent:

var filter = { "field": "error_column", 'oper': 'eq', "data": 'Test' }; 
$("Grid2").jqGrid('setGridParam', { search: true, postData: { filters: filter} }) 
$("Grid2").trigger('reloadGrid'); 

Lorsque je clique sur le bouton que cela est lié, rien ne se passe et il ne provoque pas d'erreurs.

EDIT Voici le code d'initialisation de la grille:

jQuery("#Grid2").jqGrid({ 
    datatype: "local", 
    height: 250, 
    colNames: ['NewSubscriberID', 'Conflicting Subscriber ID', 'Error Field', 'Error Message'], 
    colModel: [ 
     { name: 'new_subscriber_id', index: 'new_subscriber_id', width: 120}, 
     { name: 'conflicting_subscriber_id', index: 'conflicting_subscriber_id', width: 170}, 
     { name: 'error_column', index: 'error_column', width: 90, sorttype: "text", search: true}, 
     { name: 'error_type', index: 'error_type', width: 145} 
    ], 
    loadonce: true 
    }); 

Je lie les données au réseau en utilisant un réseau local.

+0

Utilisez-vous une recherche avancée ('multipleSearch: true') ou non? Si vous utilisez la recherche dans la barre d'outils, il est important que vous utilisiez 'stringResult: true' ou non. Ce serait mieux si vous incluez plus de code dans votre question. – Oleg

+0

Je n'utilise pas la recherche multiple car les données ne doivent être recherchées que dans une colonne. J'ai mis à jour la question pour inclure le code d'initialisation. –

Répondre

18

Vous devriez mettre en œuvre la recherche de champ unique dans un peu une autre façon:

var grid = jQuery("#Grid2"); 
var postdata = grid.jqGrid('getGridParam','postData'); 
jQuery.extend (postdata, 
       {filters:'', 
       searchField: 'error_column', 
       searchOper: 'eq', 
       searchString: 'Test'}); 
grid.jqGrid('setGridParam', { search: true, postData: postdata }); 
grid.trigger("reloadGrid",[{page:1}]); 

Vous pouvez voir l'exemple en direct here.

MISE À JOUR: Vous utilisez loadonce: true et datatype: "local" ensemble. La valeur loadonce: true sera ignorée dans le cas de datatype: "local". Si vous obtenez les données du serveur et utilisez datatype: "json" ou datatype: "xml", alors loadonce: true fonctionnera. Si vous voulez que la recherche (filtrage) soit faite non localement mais sur le serveur à la place, vous devriez réinitialiser datatype à 'json' ou 'xml' comme option supplémentaire de 'setGridParam'.

+0

Homme, c'était exactement ce que je cherchais! Merci beaucoup –

+0

@ Stéphane: Je suis content d'entendre ça. Je vous en prie! – Oleg

+0

C'est exactement ce que je cherchais aussi! Merci! – aknatn