代码之家  ›  专栏  ›  技术社区  ›  Max Fiedler

Kendo UI MVC网格,列单元格与前一列单元格相减

  •  0
  • Max Fiedler  · 技术社区  · 6 年前

    我有一个子网格,我想用前面的“值”列单元格客户端减去“值”列单元格,我尝试使用ClientTemplate,但无法使其工作,而且Telerik似乎没有关于这方面的任何文档记录。

    前任 , 假设我正在查看带有“SensorId”3的“Value”,我希望“Change”列为:“Value”,其中“SensorId”==3 “Value”,其中“SensorId”==4,依此类推。

    @(
    Html.Kendo().Grid<ErvinBeta.Models.ViewModels.ValueViewModel>().Name("ValueGrid#=SensorId#")
        .DataSource(ds => ds.Ajax()
        .Model(m => m.Id(sv => sv.SensorId))
        .PageSize(15)
        .Read(read => read.Action("ReadValue", "Home", new { SensorId = "#=SensorId#" }))
        .Sort(sort => sort.Add(sv => sv.Timestamp).Descending()))
    
        .Columns(columns =>
        {
            columns.Bound(sensorValue => sensorValue.ValueId).Visible(false);
            columns.Bound(sensorValue => sensorValue.SensorId).Visible(false);
            columns.Bound(sensorValue => sensorValue.Value).Title("Value").HtmlAttributes(new { @class = "valueColumn" }).Width(150).Filterable(ftb => ftb.Cell(cell => cell.Operator("contains")).Cell(cell => cell.ShowOperators(false)));
            columns.Bound(sensorValue => sensorValue.Category.Unit).Title("Unit").Width(200).Filterable(false);
            columns.Bound(sensorValue => sensorValue.Timestamp).Title("Timestamp").Format("{0:yyyy-MM-dd}").Filterable(ftb => ftb.Cell(cell => cell.Operator("contains")).Cell(cell => cell.ShowOperators(false)));
        })
        .Scrollable()
        .Pageable()
        .Sortable()
        .Filterable(ftb => ftb.Mode(GridFilterMode.Row))
        .HtmlAttributes(new { style = "height: 600px;", @class="valueTable"})
        .ToClientTemplate()
    )
    

    提前谢谢。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Max Fiedler    6 年前

    设法解决了问题, 但剑道之外 .

    我将我的列添加到控制器内的列表中,按时间戳对其进行排序并循环。

    public ActionResult ReadValue([DataSourceRequest] DataSourceRequest request, int sensorId){
    
            using (var db = new Entity())
            {
                var sensorValues = db.SensorValue.Where(sv => sv.SensorId == sensorId)
                    .Select(select => new ValueViewModel
                    {
                        ValueId = select.Id,
                        SensorId = select.SensorId,
                        Value = select.Value,
                        Comment = select.Comment,
                        Timestamp = select.Timestamp,
                        Category = new CategoryViewModel()
                        {
                            CategoryId = select.ValueCategory.Id,
                            CategoryName = select.ValueCategory.Name,
                            Unit = select.ValueCategory.Unit
                        },
                        EntryTimestamp = select.EntryTimestamp
                    }).OrderBy(order => order.Timestamp).ToList();
                for(int i=0; i< sensorValues.Count;i++)
                {
                    if(i>0)
                    {
                        sensorValues[i].ChangedValue = sensorValues[i].Value - sensorValues[i - 1].Value;
                    }
                    else
                    {
                        sensorValues[i].ChangedValue = 0;
                    }
                }
                return Json(sensorValues.ToDataSourceResult(request));
            }
        }