Data Grids / Data Management ▸ Overview

DevExtreme ASP.NET MVC DataGrid is a jQuery-based client-side control with a variety of features. The features include data binding to Web API and MVC controllers, record grouping, filtering, sorting, and row selection. DataGrid includes strongly-typed HTML helpers and enables client-side validation based on Data Annotations. You can configure the control with Razor C# syntax.

@(Html.DevExtreme().DataGrid()
    .ID("gridContainer")
    .DataSource(d => d
        .OData()
        .Version(2)
        .Url("https://js.devexpress.com/Demos/SalesViewer/odata/DaySaleDtoes")
        .Key("Id")
        .BeforeSend(@<text>
            function(request) {
                const year = new Date().getFullYear() - 1;
                request.params.startDate = `${year}-05-10`;
                request.params.endDate = `${year}-5-15`;
            }
        </text>)
    )
    .RemoteOperations(false)
    .AllowColumnReordering(true)
    .RowAlternationEnabled(true)
    .Width("100%")
    .ShowBorders(true)
    .OnContentReady("contentReady")
    .Paging(p => p.PageSize(10))
    .Pager(p => p
        .Visible(true)
        .ShowPageSizeSelector(true)
        .AllowedPageSizes(new[] {10, 25, 50, 100})
    )
    .SearchPanel(s => s
        .Visible(true)
        .HighlightCaseSensitive(true)
    )
    .GroupPanel(g => g.Visible(true))
    .Grouping(g => g.AutoExpandAll(false))
    .Columns(columns => {
        columns.Add()
            .DataField("Product")
            .GroupIndex(0);

        columns.Add()
            .DataField("Amount")
            .Caption("Sale Amount")
            .DataType(GridColumnDataType.Number)
            .Format(Format.Currency)
            .Alignment(HorizontalAlignment.Right);

        columns.Add()
            .DataField("Discount")
            .Caption("Discount %")
            .DataType(GridColumnDataType.Number)
            .Format(Format.Percent)
            .Alignment(HorizontalAlignment.Right)
            .AllowGrouping(false)
            .CssClass("bullet")
            .CellTemplate(@<text>
                @(Html.DevExtreme().Bullet()
                    .Value(new JS("value * 100"))
                    .Size(s => s
                        .Height(35)
                        .Width(150)
                    )
                    .Margin(m => m
                        .Top(5)
                        .Bottom(0)
                        .Left(5)
                    )
                    .ShowTarget(false)
                    .ShowZeroLevel(true)
                    .StartScaleValue(0)
                    .EndScaleValue(100)
                    .Tooltip(t => t
                        .Enabled(true)
                        .Font(f => f.Size(18))
                        .PaddingTopBottom(2)
                        .CustomizeTooltip("customizeTooltip")
                    )
                )
            </text>);

        columns.Add()
            .DataField("SaleDate")
            .DataType(GridColumnDataType.Date);

        columns.Add()
            .DataField("Region")
            .DataType(GridColumnDataType.String);

        columns.Add()
            .DataField("Sector")
            .DataType(GridColumnDataType.String);

        columns.Add()
            .DataField("Channel")
            .DataType(GridColumnDataType.String);

        columns.Add()
            .DataField("Customer")
            .DataType(GridColumnDataType.String)
            .Width(150);
    })
)

<script>
    var collapsed = false;
    function contentReady(e) {
        if(!collapsed) {
            collapsed = true;
            e.component.expandRow(["EnviroCare"]);
        }
    }

    function customizeTooltip(pointsInfo) {
        return { text: parseInt(pointsInfo.originalValue) + "%" };
    }
</script>
using DevExtreme.MVC.Demos.Models;
using DevExtreme.MVC.Demos.Models.DataGrid;
using DevExtreme.MVC.Demos.Models.SampleData;
using System;
using System.Linq;
using System.Web.Mvc;

namespace DevExtreme.MVC.Demos.Controllers {
    public class DataGridController : Controller {

        public ActionResult Overview() {
            return View();
        }

    }
}
.dx-datagrid .dx-data-row > td.bullet {
    padding-top: 0;
    padding-bottom: 0;
}