Respostas:
Você pode usar
$('#GridName').data('kendoGrid').dataSource.read(); <!-- first reload data source -->
$('#GridName').data('kendoGrid').refresh(); <!-- refresh current UI -->
Eu nunca atualizo.
$('#GridName').data('kendoGrid').dataSource.read();
sozinho trabalha para mim o tempo todo.
$('#GridName').data('kendoGrid').dataSource.read();
$('#GridName').data('kendoGrid').refresh();
Em um projeto recente, tive que atualizar a grade da interface do usuário do Kendo com base em algumas chamadas, que estavam acontecendo em algumas seleções suspensas. Aqui está o que eu acabei usando:
$.ajax({
url: '/api/....',
data: { myIDSArray: javascriptArrayOfIDs },
traditional: true,
success: function(result) {
searchResults = result;
}
}).done(function() {
var dataSource = new kendo.data.DataSource({ data: searchResults });
var grid = $('#myKendoGrid').data("kendoGrid");
dataSource.read();
grid.setDataSource(dataSource);
});
Espero que isso poupe algum tempo.
Nenhuma dessas respostas obtém o fato de read
retornar uma promessa, o que significa que você pode aguardar o carregamento dos dados antes de chamar a atualização.
$('#GridId').data('kendoGrid').dataSource.read().then(function() {
$('#GridId').data('kendoGrid').refresh();
});
Isso é desnecessário se a captura de dados for instantânea / síncrona, mas é mais provável que seja proveniente de um ponto de extremidade que não retornará imediatamente.
Na verdade, eles são diferentes:
$('#GridName').data('kendoGrid').dataSource.read()
atualiza os uid
atributos da linha da tabela
$('#GridName').data('kendoGrid').refresh()
deixa o mesmo uid
O que você precisa fazer é adicionar um evento .Events (events => events.Sync ("KendoGridRefresh")) no código de ligação do kendoGrid. Não é necessário gravar o código de atualização no resultado do ajax.
@(Html.Kendo().Grid<Models.DocumentDetail>().Name("document")
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(20)
.Model(model => model.Id(m => m.Id))
.Events(events => events.Sync("KendoGridRefresh"))
)
.Columns(columns =>
{
columns.Bound(c => c.Id).Hidden();
columns.Bound(c => c.UserName).Title(@Resources.Resource.lblAddedBy);
}).Events(e => e.DataBound("onRowBound"))
.ToolBar(toolbar => toolbar.Create().Text(@Resources.Resource.lblNewDocument))
.Sortable()
.HtmlAttributes(new { style = "height:260px" })
)
E você pode adicionar a seguinte função Global em qualquer arquivo .js. portanto, você pode chamá-lo para todas as grades do kendo no seu projeto para atualizar o kendoGrid.
function KendoGridRefresh() {
var grid = $('#document').data('kendoGrid');
grid.dataSource.read();
}
No meu caso, eu tinha um URL personalizado para acessar cada vez; embora o esquema do resultado permaneça o mesmo.
Eu usei o seguinte:
var searchResults = null;
$.ajax({
url: http://myhost/context/resource,
dataType: "json",
success: function (result, textStatus, jqXHR) {
//massage results and store in searchResults
searchResults = massageData(result);
}
}).done(function() {
//Kendo grid stuff
var dataSource = new kendo.data.DataSource({ data: searchResults });
var grid = $('#doc-list-grid').data('kendoGrid');
dataSource.read();
grid.setDataSource(dataSource);
});
Você pode usar as linhas abaixo
$('#GridName').data('kendoGrid').dataSource.read();
$('#GridName').data('kendoGrid').refresh();
Para um recurso de atualização automática, dê uma olhada aqui
Ao usar o código a seguir, ele automaticamente chamou o método de leitura da grade e preenche novamente a grade
$('#GridName').data('kendoGrid').dataSource.read();
Você sempre pode usar $('#GridName').data('kendoGrid').dataSource.read();
. Você realmente não precisa .refresh();
depois disso,.dataSource.read();
fará o truque.
Agora, se você deseja atualizar sua grade de uma maneira mais angular, você pode:
<div kendo-grid="vm.grid" id="grid" options="vm.gridOptions"></div>
vm.grid.dataSource.read();`
OU
vm.gridOptions.dataSource.read();
E não se esqueça de declarar sua fonte de dados como kendo.data.DataSource
tipo
Quero voltar à página 1 quando atualizar a grade. Apenas chamar a função read () manterá você na página atual, mesmo se os novos resultados não tiverem muitas páginas. Chamar .page (1) na fonte de dados atualizará a fonte de dados E retornará à página 1, mas falhará nas grades que não são pagináveis. Esta função lida com ambos:
function refreshGrid(selector) {
var grid = $(selector);
if (grid.length === 0)
return;
grid = grid.data('kendoGrid');
if (grid.getOptions().pageable) {
grid.dataSource.page(1);
}
else {
grid.dataSource.read();
}
}
Para fazer uma atualização completa, onde a grade será renderizada novamente junto com a nova solicitação de leitura, você pode fazer o seguinte:
Grid.setOptions({
property: true/false
});
Onde propriedade pode ser qualquer propriedade, por exemplo, classificável
Basta escrever o código abaixo
$('.k-i-refresh').click();
$("#theidofthegrid").data("kendoGrid").dataSource.data([ ]);
Você pode tentar:
$('#GridName').data('kendoGrid').dataSource.read();
$('#GridName').data('kendoGrid').refresh();
Se você deseja que a grade seja atualizada automaticamente em uma base cronometrada, você pode usar o exemplo a seguir, com o intervalo definido em 30 segundos:
<script type="text/javascript" language="javascript">
$(document).ready(function () {
setInterval(function () {
var grid = $("#GridName").data("kendoGrid");
grid.dataSource.read();
}, 30000);
});
</script>
A configuração / dados padrão / atualizados dos widgets é configurada para se ligar automaticamente a um DataSource associado.
$('#GridId').data('kendoGrid').dataSource.read();
$('#GridId').data('kendoGrid').refresh();
refresh
Você também pode atualizar sua grade enviando novos parâmetros para a ação Ler e configurando as páginas como desejar:
var ds = $("#gridName").data("kendoGrid").dataSource;
ds.options.page = 1;
var parameters = {
id: 1
name: 'test'
}
ds.read(parameters);
Neste exemplo, a ação de leitura da grade está sendo chamada pelo valor de 2 parâmetros e após obter o resultado, a paginação da grade fica na página 1.
A maneira mais fácil de atualizar é usar a função refresh (). Qual é o seguinte:
$('#gridName').data('kendoGrid').refresh();
enquanto você também pode atualizar a fonte de dados usando este comando:
$('#gridName').data('kendoGrid').dataSource.read();
Na verdade, este último recarrega a fonte de dados da grade. O uso de ambos pode ser feito de acordo com sua necessidade e exigência.
$("#grd").data("kendoGrid").dataSource.read();
dataSource.read()
read
solicitará o servidor e recarregará apenas a fonte de dados. Não haverá alterações na interface do usuário.refresh
renderiza novamente os itens na grade a partir da fonte de dados atual. É por isso que ambos são necessários.