将新列插入Kendo Datagrid

时间:2014-03-07 14:58:42

标签: javascript kendo-ui kendo-grid

我的列数是我的剑道网格中的数量,总价格。然后我想将计算列添加到我的datagrid。 例如:

    $("#gridcolumnadd").click(function (e) {
    //1.add new column code Column Name is "Price For per kg" 
    //2.Set Column type is number
    //3.Set Column aggregate is sum for footerTemplate
    //4.add calculated values ex:(Totalprice/quantity) to "Price For per kg" with using for loop row count.
    //redraw datagrid 

});

可以在kendo datagrid中创建吗? **


注意
我想先创建DATAGRID,然后通过计算添加新列。原因是“我写的只是按钮点击”

** 例如;它不起作用

var raw = grid.dataSource.data();
  var length = raw.length;//if ı have many data . I can use For Loop
  raw[0].new="Test"; //I think one data we have it
  grid.columns.push({ field: "new" });
  grid.dataSource.data(raw);

1 个答案:

答案 0 :(得分:3)

一些提示:

  1. 您应该showhide列,而不是添加列,否则您将需要销毁当前网格并创建一个新网格(非常昂贵)。
  2. 从头开始创建它。您的模型中可能包含实际上不是来自服务器的字段,或者您可以包含不在模型中的字段。你应该决定。
  3. 不明白你的意思 Set Column aggregate是footerTemplate的总和。据我所知,你想要定义一个列的集合,所以你应该看看columns.aggregate
  4. 这是一个可编辑的网格吗?如果不是,我建议您使用dataBound事件处理程序或甚至使用DataSource schema.parse
  5. 从服务器接收数据时进行计算

    让我们看看它是如何结合在一起的......

    这是我原来的架构:

    schema: {
        model: {
            id: "ProductID",
            fields: {
                ProductID: { type: "number" },
                ProductName: { type : "text" },
                UnitPrice: { type: "number" },
                UnitsInStock: { type: "number" }
            }
        },
        ...
    

    第一件事是添加Total等于UnitPriceUnitsInStock,我将使用parse

    schema: {
        model: {
            id: "ProductID",
            fields: {
                ProductID: { type: "number" },
                ProductName: { type : "text" },
                UnitPrice: { type: "number" },
                UnitsInStock: { type: "number" },
                Total: { type: "total" }
            }
        },
        parse : function (d) {
            $.each(d, function(idx, elem) {
                elem.Total = elem.UnitPrice * elem.UnitsInStock;
            })
            return d;
        }
    },
    

    你可以看到我添加了一个额外的字段Total,然后在parse中我迭代计算每条记录的总数。

    接下来定义一个聚合,计算收到的所有数据的总和。

    aggregate: [ 
        { field: "Total", aggregate: "sum" }
    ]
    

    这很简单!

    现在让我们定义网格的列:

    columns: [
        { field: "ProductName", title : "Name" },
        { field: "UnitPrice", title: "Price" },
        { field: "UnitsInStock", title:"Units" },
        { 
            field: "Total", 
            title:"Total", 
            hidden: true, 
            aggregates: [ "sum" ],
            footerTemplate: "#= sum #"
        }
    ]
    

    重要的是Total列,其中: *我使用hidden: true定义为(最初)隐藏。 *我还定义了aggregate sum。 *最后我定义了一个用于打印它的模板。

    最后,我不需要重绘网格,只需调用columnShow ...

    $("#gridcolumnadd").click(function (e) {
        $("#grid").data("kendoGrid").columnShow(3);
    });
    

    所有这些在一起:http://jsfiddle.net/OnaBai/63mg9/