web-dev-qa-db-fra.com

Comment vérifier si des modifications ont été apportées à une grille de Kendo?

Comment puis-je vérifier si un Kendo Grid a des modifications? J'ai entendu dire qu'il existe une propriété dirty, mais je ne la trouve pas.

19
muthucsm

Les lignes ajoutées auront la propriété dirty définie sur true et les lignes mises à jour seront donc. Mais les lignes supprimées sont stockées ailleurs (dans la collection _destroyed). Passez cette fonction à la source de données de votre grille pour voir si elle a été modifiée.

function doesDataSourceHaveChanges(ds)
{
    var dirty = false;

    $.each(ds._data, function ()
    {
        if (this.dirty == true)
        {
            dirty = true;
        }
    });

    if (ds._destroyed.length > 0) dirty = true;

    return dirty;
}
18
carlg

Vous pouvez utiliser la méthode 'hasChanges' sur la source de données sous-jacente de la grille:

grid.dataSource.hasChanges();

$('#divGrid').data('kendoGrid').dataSource.hasChanges();
29
Chris Pietschmann

Vous pouvez recevoir une notification et utiliser l'événement de modification de la source de données, qui se produira où que vous soyez/tri/groupe/filtre/créer/lire/mettre à jour/supprimer un enregistrement.

Pour y attacher un gestionnaire, utilisez:

$('#YourGrid').data().kendoGrid.dataSource.bind('change',function(e){
    //the event argument here will indicate what action just happned
    console.log(e.action)// could be => "itemchange","add" or "remove" if you made any changes to the items
})

Mise à jour: si l'utilisateur a mis à jour l'un des modèles .z la méthode .hasChanges () de la source de données renverra la valeur true.

9
Petur Subev

grid.dataSource.hasChanges vous indiquera si la source de données a changé

                            if (datasource.hasChanges() === true) {
                                alert('yes');
                            } else {
                                alert('no');
                            }
3
Ricardo Bermudez

ça vaut le coup d'essayer:

var hasDirtyRow = $.grep(gridDataSource.view(), function(e) { return e.dirty === true; });
if (hasDirtyRow.length != 0)
{
     // grid has dirty row(s)
}
1
Ann B. G.

Le moyen le plus pratique est d'utiliser datasource.hasChanges(). Toutefois, cela nécessite que le champ Id soit défini dans le schéma. 

De la docs :

Vérifie si les éléments de données ont changé. Requiert qu'un [champ ID] soit Configuré dans schema.model.id, sinon le résultat sera toujours true.

Si vous n'avez pas défini de champ Id, vous pouvez utiliser l'une des nombreuses méthodes pour effectuer une itération sur les données elles-mêmes. 

var isDataSourceDirty = function (ds) {
    var dirty = ds._data.filter(function(x){
        return x.dirty === true;
    });
    return dirty.length > 0 || ds._destroyed.length;
};
0
Marco