1

У меня есть некоторые действия, которые необходимо выполнить во время/после привязки данных моих диаграмм.Диаграмма пользовательского интерфейса Kendo - Обновление источника данных после привязки

Одна из вещей заключается в том, что я добавляю отсутствующие категории (месяцы). Моя проблема заключается в том, что, если я добавлю эти недостающие значения в источник данных, он снова инициирует событие базы данных.

Есть ли лучший способ сделать это?

@(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

Каждый раз, когда данные внутри DataSource добавляется, изменение или удаление DataSource вызовет событие Change, и каждый виджет, который имеет DataSource будет инициировать событие DataBound после DataSource изменяется.

Поэтому ваше событие DataBound запускается дважды, тогда как ваша диаграмма, использующая удаленный сервис, составляет Read его данных, внутри нее есть два события, которые будут срабатывать для его достижения. Событие RequestStart и RequestEnd будут называться, поэтому я предлагаю вам добавить свою отсутствующую категорию в источник данных 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

Смежные вопросы