web-dev-qa-db-fra.com

Changer la grille de kendo Source de données utiliser JS

J'ai une grille Kendo et je mets cette source de données

.DataSource(dataSource => dataSource
                                .Ajax()
                                .PageSize(20)

                                .Read(read => read.Action("GetWorker", "Worker"))

J'ai un bouton sur ma page et je veux changer de source de données lorsque j'appuie sur ce bouton (utilisez Java). Je veux faire quelque chose comme ça

.DataSource(dataSource => dataSource
                                .Ajax()
                                .PageSize(20)

                                .Read(read => read.Action("GetDisabled", "Worker"))

J'essaye de faire comme ça

var grid = $("grid").data("kenodGrid");
            grid.dataSource().read()

mais je ne sais pas quoi faire après grid.dataSource (). comment puis-je changer la source de données? Thnaks et j'espère pour vous aider

20
Std_Net

Je pense que vous devez d'abord créer une nouvelle DataSource (voir http://demos.kendoui.com/web/datasource/remote-data.html pour les données distantes)

var dataSource = new kendo.data.DataSource({
    data: [
        { name: "John Doe", age: 33 }
    ]
});

Et puis ajoutez-le à la grille en utilisant la méthode setDataSource ( http://docs.kendoui.com/api/web/grid#methods-setDataSource )

var grid = $("#grid").data("kendoGrid");
grid.setDataSource(dataSource);
39
Lopo

Puisque vous souhaitez modifier l'action de votre lecture, vous pouvez simplement le faire. Selon cette question vous pouvez simplement définir l'URL de lecture de la source de données et actualiser vos données de grille avec quelque chose comme ça:

var grid = $("#grid").data("kendoGrid");
grid.dataSource.transport.options.read.url = "newUrlPath";
grid.dataSource.read();
grid.refresh();

Si vous ne voulez pas vraiment changer votre source de données mais vos données et éventuellement obtenir votre liste d'éléments d'une demande ajax en tant que json, je vais écrire ma façon de le faire comme exemple au cas où quelqu'un le voudrait.

var jsonData = ... // From some ajax response
var newKendoDatasource = newKendoDS(jsonData);
$("#grid").data("kendoGrid").dataSource.data(newKendoDatasource._data);

La fonction est à peu près comme ci-dessus

function newKendoDS(ndata) {
    var datasource = new kendo.data.DataSource({ data: ndata });
    datasource.read(); // In order to refresh
    return datasource;
}
2