kendo ui如何过滤dataSource requestStart

时间:2013-06-13 21:35:22

标签: kendo-ui datasource

主要问题

我当前的问题是更新网格数据源时的刷新进度。当requestStart事件开始时,我已经以这种方式使用 kendo.ui.progress 更改我的代码我将kendo.ui.progress设置为true。这会在结束调用requestEnd时激活加载图像。

问题是这个事件对于排序和过滤很重要。我希望它只触发dataSource的读取功能。这个问题使网格无休止地使用进度。

是否有某种方法可以在 requestStart 中过滤, requestEnd 只能在传输读取上激活?

我的数据源代码

dataSource = new kendo.data.DataSource({
  transport: {
    read: {
      url: url_Obtener_Periodo,
      type: "POST"
    },
    parameterMap: function (options, operation) {
      if (operation == "read" && options) {
        return {
          "periodo.Year": $("#periodo-anio").val(),
          "periodo.Month": $("#periodo-mes").val(),
          "Filtro": $("#Filtro").val()
        };
      }
    }
  },
  requestStart: function (e) {
    kendo.ui.progress($("#grid-container"), true);
  },
  requestEnd: function (e) {
    kendo.ui.progress($("#grid-container"), false);
  },
  schema:{
    model: {
      id: "Codigo_De_Pedido",
      fields: {
        Codigo_De_Pedido: { type: "number" },
        Fecha_Y_Hora_De_Creacion: { type: "date" },
        UserName: { type: "string" },
        Nombre_Del_Usuario: { type: "string" },
        Codigo_Del_Vendedor: { type: "number" },
        Nombre_Del_Vendedor: { type: "string" },
        Is_Pedido_Closed: { type: "bool" },
        Estado: { type: "string" }
      }
    }
  },
  pageSize: 10
});

2 个答案:

答案 0 :(得分:0)

我为解决进步所做的改变无休止地解决了问题2。

  • 从dataSource
  • 中删除requestEnd函数
  • 将dataBound函数添加到Grid

数据源代码

dataSource = new kendo.data.DataSource({
  transport: {
    read: {
      url: url_Obtener_Periodo,
      type: "POST"
    },
    parameterMap: function (options, operation) {
      if (operation == "read" && options) {
        return {
          "periodo.Year": $("#periodo-anio").val(),
          "periodo.Month": $("#periodo-mes").val(),
          "Filtro": $("#Filtro").val()
        };
      }
    }
  },
  schema:{
    model: {
      id: "Codigo_De_Pedido",
      fields: {
        Codigo_De_Pedido: { type: "number" },
        Fecha_Y_Hora_De_Creacion: { type: "date" },
        UserName: { type: "string" },
        Nombre_Del_Usuario: { type: "string" },
        Codigo_Del_Vendedor: { type: "number" },
        Nombre_Del_Vendedor: { type: "string" },
        Is_Pedido_Closed: { type: "bool" },
        Estado: { type: "string" }
      }
    }
  },
  pageSize: 10,
  requestStart: function (e) {
    kendo.ui.progress($("#grid-container"), true);
  }
});

Kendo网格代码

kendoGrid = $("#selectable-pedidos").kendoGrid({
  dataSource: dataSource,
  pageable: true,
  sortable: true,
  filterable: {
    extra: false,
    operators: {
      string: {
        startswith: "Comienza Con",
        eq: "Es Igual A",
        neq: "No Es Igual A"
      }
    }
  },
  dataBound: function (e) {
    kendo.ui.progress($("#grid-container"), false);
  },
  columns: [
    { field: "Fecha_Y_Hora_De_Creacion", title: "Fecha y Hora", template: "#= kendo.toString(Fecha_Y_Hora_De_Creacion, 'dd/MM/yyyy hh:mm:ss tt') #" },
    { field: "Codigo_De_Pedido", title: "Código de Pedido" },
    { field: "Estado", filterable: true, title: "Estado" },
    { field: "Codigo_Del_Vendedor", title: "Código de Vendedor" },
    { field: "Nombre_Del_Vendedor", title: "Nombre de Vendedor" },
    {
      command: {
        text: "Ver Detalle de Pedido",
        click: function (e) {
          $("#empty").append("<form method='POST' action='/HojaDeRuta/GetById/'><input type='hidden' name='Codigo_Pedido' value='"
                            + this.dataItem($(e.currentTarget).closest("tr")).Codigo_De_Pedido + "' /><input type='submit' /></form>");
          $("#empty input[type='submit']").click();
        }
      },
      title: " " 
    }
  ]
}).data("kendoGrid");

答案 1 :(得分:0)

对于那些阅读此内容的人,有一些值得一提的问题:

  

是否有某种方法可以在requestStart和requestEnd中进行过滤   在传输读取时激活?

是的,但它对你没有帮助。事件的参数具有type属性,该属性将包含readupdatedestroycreate

 statementEntriesDS.bind("requestStart", function (e) {     
                switch (e.type) {
                    case "create":
                        alert('-> event, type "create".');
                        break;
                    case "read":
                        alert('-> event, type "read".');
                        break;
                    case "update":
                        alert('-> event, type "update".');
                        break;
                    case "destroy":
                        alert('-> event, type "destroy".');
                        break;
                }
            });

您的示例代码没有指定serverFiltering或serverSorting,因此排序和过滤不会导致远程操作。您只能获得客户端排序和过滤。但是,如果他们被指定,那么他们将会产生read并且对您没有任何帮助。

你不会让requestEnd事件发生火灾。您应该为error事件添加一个处理程序,看看是否出现故障。

如果您真的希望完全控制所发生的事情,可以为read指定一项功能:

transport: {
                read: function (options) {
                    kendo.ui.progress($gridContainer, true);
                    $.ajax({
                        url: carrierServiceBaseUrl + "/GetManualStatementsCarrierList",
                        contentType: 'application/json; charset=utf-8',
                        dataType: "json",
                        type: "POST",
                        success: function (result) {
                            // notify the data source that the request succeeded
                            options.success(result);
                            kendo.ui.progress($gridContainer, false);                            },
                        error: function (result) {
                            options.error(result); // Call the DataSource's "error" method with the results
                            kendo.ui.progress($gridContainer, false);
                            notification.show({
                                title: "ERROR:",
                                message: result.statusText
                            }, "error");
                        }
                    });
                }
            }