3

仕様

剣道:2012.3.1114

.ネット: 4.5

MVC: 4.0

問題

モデルとして DataTable を使用してグリッドをバインドしていますが、集計値が必要です。以下のスニペットをベースとして (Kendo UI Code Library から取得) 使用すると、集計関数を設定する方法がないように見えます。

@(Html.Kendo().Grid(Model)
    .Name("Grid")    
    .Columns(columns => {
        foreach (System.Data.DataColumn column in Model.Columns)
        {
            columns.Bound(column.DataType, column.ColumnName);
        }
    })
    .Pageable()
    .Sortable()
    .Scrollable()
    .Filterable()
    .Groupable()
    .DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("Read", "Home"))   
    )
)

Telerik MVC コントロールの時代に戻ると、バインドされた列を追加するときに集計関数を設定できましたが、DataSource 内に移動された Kendo UI ラッパーで集計を設定できました。

テレリック グリッド:

columns.Bound("ColumnName").Aggregate(aggregates => aggregates.Count().Min().Max())

DataSource で集計を設定しようとすると、「'count' is undefined」という素敵な例外が発生しますが、これは少しあいまいです。

if (column.ColumnName == "ProductID")
{
    columns
        .Bound(column.DataType, column.ColumnName)
        .ClientFooterTemplate("Count: #=count#");
}
...
.Aggregates(aggregates =>
{
aggregates.Add(a => "ProductID").Count();
})

集計の問題を回避する方法はありますか?

4

1 に答える 1

8

これはデータグリッドで合計関数を実行する際の問題を解決しませんが、この回答は Kendo UI/Telerik サポート チームによって提供されたものであり、カウント関数に関する上記の質問を解決します。

@(Html.Kendo().Grid<dynamic>()
    .Name("Grid")
    .Columns(columns =>
    {
        foreach (System.Data.DataColumn column in Model.Columns)
        {

            var boundColumn = columns.Bound(column.ColumnName);
            if (column.ColumnName == "ProductID")
            {
                boundColumn.ClientFooterTemplate("#= data.ProductID !== undefined ? ProductID.count : ''#");
            }
        }
    })
    .Pageable()
    .Sortable()
    .AutoBind(false)
    .Scrollable()
    .Filterable()
    .Groupable()
    .DataSource(dataSource => dataSource
        .Ajax()
        .Model(model =>
            {
                foreach (System.Data.DataColumn column in Model.Columns)
                {

                    model.Field(column.ColumnName, column.DataType);
                }
            })
        .Read(read => read.Action("Read", "Home"))
    )
)

<script>
    $(document).ready(function () {
        var grid = $("#Grid").data("kendoGrid");
        grid.dataSource.aggregate(
            [
                {
                    field: "ProductID",
                    aggregate: "count"
                }
            ]);
    });
</script>
于 2013-02-01T01:28:25.400 に答える