Kendo UI Chart - 在数据绑定后更新数据源

时间:2015-04-13 02:30:23

标签: asp.net-mvc kendo-ui kendo-asp.net-mvc kendo-dataviz kendo-datasource

我有一些需要在我的图表数据绑定期间/之后执行的操作。

其中一件事是我添加了缺失的类别(月份)。我的问题是,如果我将这些缺失值添加到数据源,它会再次触发数据绑定事件。

有更好的方法吗?

@(Html.Kendo().Chart<MyModel>()
    .Name("chart")
    .DataSource(ds => ds.Read(read => read.Action("GetData", "Home")))
    .CategoryAxis(a => a.Date().Categories(c => c.Date))
    .ValueAxis(v => v.Numeric().Min(0).Max(100))
    .Series(series => series.Column(d => d.Value))
    .Events(e => e.DataBound("dataBound"))
)

function dataBound(e) {
    var chart = e.sender;
    var today = new Date(); 
    // Add current month to chart
    chart.dataSource.add({
        CategoryDate: today,
        Value: 0
    });
}

1 个答案:

答案 0 :(得分:1)

每次DataSource内的数据添加,修改或删除DataSource都会触发事件Change,而每个DataSource的小部件都会触发事件DataBound DataSource更改后。

因此,您的DataBound事件被触发两次,而您的图表使用远程服务来Read其数据,内部有2个事件将触发实现它。将调用事件RequestStartRequestEnd,因此我建议您在数据源RequestEnd事件中添加缺少的类别。

RequestEnd事件中,您可以修改其响应数据,您可以调试它以查看此响应的完整结构;通常它将具有Data属性,这是您需要更改的属性。

示例代码

@(Html.Kendo().Chart<MyModel>()
    .Name("chart")
    .DataSource(ds => ds.Read(read => read.Action("GetData", "Home"))
                        .Events(evt => evt.RequestEnd("onChartDsRequestEnd")))
    .CategoryAxis(a => a.Date().Categories(c => c.Date))
    .ValueAxis(v => v.Numeric().Min(0).Max(100))
    .Series(series => series.Column(d => d.Value))
    .Events(e => e.DataBound("dataBound"))
)

function onChartDsRequestEnd(e) {
    // data you should modify before its being placed as datasource's data
    var responseData = e.response;
    responseData.push({.......});
}

Datasource RequestEnd Documentation