Feel free to share demo-related thoughts here.
If you have technical questions, please create a support ticket in the DevExpress Support Center.
Thank you for the feedback!
If you have technical questions, please create a support ticket in the DevExpress Support Center.
Backend API
@using DevExtreme.NETCore.Demos.Models
@model IEnumerable<Order>
<div class="widget-container">
<div class="dx-fieldset">
<div class="dx-fieldset-header">Resizable DataGrid</div>
<div class="dx-field">
@(Html.DevExtreme().Resizable()
.ID("gridContainer")
.MinWidth(400)
.MinHeight(150)
.MaxHeight(370)
.Area(".widget-container .dx-field")
.Content(Html.DevExtreme().DataGrid<Order>()
.ID("grid")
.DataSource(Model, new[] { "ID" })
.ShowBorders(true)
.Height("100%")
.Paging(p => p.PageSize(8))
.Scrolling(s => s.Mode(GridScrollingMode.Virtual))
.Columns(columns => {
columns.AddFor(m => m.OrderNumber)
.AllowGrouping(false)
.Width(130);
columns.AddFor(m => m.CustomerStoreCity);
columns.AddFor(m => m.CustomerStoreState);
columns.AddFor(m => m.Employee);
columns.AddFor(m => m.OrderDate);
columns.AddFor(m => m.SaleAmount)
.Format(Format.Currency);
})
.ToString()
)
)
</div>
</div>
</div>
<div class="options">
<div class="caption">Resizable Options</div>
<div class="option">
<div>Handles</div>
@(Html.DevExtreme().TagBox()
.InputAttr("aria-label", "Behavior")
.Items(new[] { "left", "top", "right", "bottom" })
.Value(new[] { "left", "top", "right", "bottom" })
.OnValueChanged("handlesChanged")
)
</div>
<div class="option">
@(Html.DevExtreme().CheckBox()
.Text("Keep aspect ratio")
.Value(true)
.OnValueChanged("keepAspectRatioChanged")
)
</div>
</div>
<script>
const allHandles = ["left", "top", "right", "bottom"];
function keepAspectRatioChanged(e) {
const resizable = $("#gridContainer").dxResizable('instance');
resizable.option('keepAspectRatio', e.value);
}
function handlesChanged({ value }) {
const resizable = $("#gridContainer").dxResizable('instance');
const resizableClasses = allHandles.reduce((classes, handle) => {
const newClass = value.includes(handle) ? '' : ` no-${handle}-handle`;
return classes + newClass;
}, '');
resizable.option({
handles: value.join(" "),
elementAttr: {
class: resizableClasses
}
});
}
</script>
using DevExtreme.NETCore.Demos.Models;
using DevExtreme.NETCore.Demos.Models.SampleData;
using Microsoft.AspNetCore.Mvc;
using System.Linq;
namespace DevExtreme.NETCore.Demos.Controllers {
public class ResizableController : Controller {
public ActionResult Overview() {
return View(SampleData.Orders);
}
}
}
using System;
using System.ComponentModel.DataAnnotations;
namespace DevExtreme.NETCore.Demos.Models {
public class Order {
public int ID { get; set; }
[Display(Name = "Invoice Number")]
public int OrderNumber { get; set; }
public DateTime OrderDate { get; set; }
public int SaleAmount { get; set; }
public string Terms { get; set; }
public int TotalAmount { get; set; }
[Display(Name = "State")]
public string CustomerStoreState { get; set; }
[Display(Name = "City")]
public string CustomerStoreCity { get; set; }
public string Employee { get; set; }
}
}
using System;
using System.Collections.Generic;
namespace DevExtreme.NETCore.Demos.Models.SampleData {
public partial class SampleData {
public static readonly IEnumerable<Order> Orders = new[] {
new Order {
ID = 1,
OrderNumber = 35703,
OrderDate = DateTime.Parse("2014/04/10"),
SaleAmount = 11800,
Terms = "15 Days",
TotalAmount = 12175,
CustomerStoreState = "California",
CustomerStoreCity = "Los Angeles",
Employee = "Harv Mudd"
},
new Order {
ID = 4,
OrderNumber = 35711,
OrderDate = DateTime.Parse("2014/01/12"),
SaleAmount = 16050,
Terms = "15 Days",
TotalAmount = 16550,
CustomerStoreState = "California",
CustomerStoreCity = "San Jose",
Employee = "Jim Packard"
},
new Order {
ID = 5,
OrderNumber = 35714,
OrderDate = DateTime.Parse("2014/01/22"),
SaleAmount = 14750,
Terms = "15 Days",
TotalAmount = 15250,
CustomerStoreState = "Nevada",
CustomerStoreCity = "Las Vegas",
Employee = "Harv Mudd"
},
new Order {
ID = 7,
OrderNumber = 35983,
OrderDate = DateTime.Parse("2014/02/07"),
SaleAmount = 3725,
Terms = "15 Days",
TotalAmount = 3850,
CustomerStoreState = "Colorado",
CustomerStoreCity = "Denver",
Employee = "Todd Hoffman"
},
new Order {
ID = 9,
OrderNumber = 36987,
OrderDate = DateTime.Parse("2014/03/11"),
SaleAmount = 14200,
Terms = "15 Days",
TotalAmount = 14800,
CustomerStoreState = "Utah",
CustomerStoreCity = "Salt Lake City",
Employee = "Clark Morgan"
},
new Order {
ID = 11,
OrderNumber = 38466,
OrderDate = DateTime.Parse("2014/03/01"),
SaleAmount = 7800,
Terms = "15 Days",
TotalAmount = 8200,
CustomerStoreState = "California",
CustomerStoreCity = "Los Angeles",
Employee = "Harv Mudd"
},
new Order {
ID = 14,
OrderNumber = 39420,
OrderDate = DateTime.Parse("2014/02/15"),
SaleAmount = 20500,
Terms = "15 Days",
TotalAmount = 9100,
CustomerStoreState = "California",
CustomerStoreCity = "San Jose",
Employee = "Jim Packard"
},
new Order {
ID = 15,
OrderNumber = 39874,
OrderDate = DateTime.Parse("2014/02/04"),
SaleAmount = 9050,
Terms = "30 Days",
TotalAmount = 19100,
CustomerStoreState = "Nevada",
CustomerStoreCity = "Las Vegas",
Employee = "Harv Mudd"
},
new Order {
ID = 18,
OrderNumber = 42847,
OrderDate = DateTime.Parse("2014/02/15"),
SaleAmount = 20400,
Terms = "30 Days",
TotalAmount = 20800,
CustomerStoreState = "Wyoming",
CustomerStoreCity = "Casper",
Employee = "Todd Hoffman"
},
new Order {
ID = 19,
OrderNumber = 43982,
OrderDate = DateTime.Parse("2014/05/29"),
SaleAmount = 6050,
Terms = "30 Days",
TotalAmount = 6250,
CustomerStoreState = "Utah",
CustomerStoreCity = "Salt Lake City",
Employee = "Clark Morgan"
},
new Order {
ID = 29,
OrderNumber = 56272,
OrderDate = DateTime.Parse("2014/02/06"),
SaleAmount = 15850,
Terms = "30 Days",
TotalAmount = 16350,
CustomerStoreState = "Utah",
CustomerStoreCity = "Salt Lake City",
Employee = "Clark Morgan"
},
new Order {
ID = 30,
OrderNumber = 57429,
OrderDate = DateTime.Parse("2013/12/31"),
SaleAmount = 11050,
Terms = "30 Days",
TotalAmount = 11400,
CustomerStoreState = "Arizona",
CustomerStoreCity = "Phoenix",
Employee = "Clark Morgan"
},
new Order {
ID = 32,
OrderNumber = 58292,
OrderDate = DateTime.Parse("2014/05/13"),
SaleAmount = 13500,
Terms = "15 Days",
TotalAmount = 13800,
CustomerStoreState = "California",
CustomerStoreCity = "Los Angeles",
Employee = "Harv Mudd"
},
new Order {
ID = 36,
OrderNumber = 62427,
OrderDate = DateTime.Parse("2014/01/27"),
SaleAmount = 23500,
Terms = "15 Days",
TotalAmount = 24000,
CustomerStoreState = "Nevada",
CustomerStoreCity = "Las Vegas",
Employee = "Harv Mudd"
},
new Order {
ID = 39,
OrderNumber = 65977,
OrderDate = DateTime.Parse("2014/02/05"),
SaleAmount = 2550,
Terms = "15 Days",
TotalAmount = 2625,
CustomerStoreState = "Wyoming",
CustomerStoreCity = "Casper",
Employee = "Todd Hoffman"
},
new Order {
ID = 40,
OrderNumber = 66947,
OrderDate = DateTime.Parse("2014/03/23"),
SaleAmount = 3500,
Terms = "15 Days",
TotalAmount = 3600,
CustomerStoreState = "Utah",
CustomerStoreCity = "Salt Lake City",
Employee = "Clark Morgan"
},
new Order {
ID = 42,
OrderNumber = 68428,
OrderDate = DateTime.Parse("2014/04/10"),
SaleAmount = 10500,
Terms = "15 Days",
TotalAmount = 10900,
CustomerStoreState = "California",
CustomerStoreCity = "Los Angeles",
Employee = "Harv Mudd"
},
new Order {
ID = 43,
OrderNumber = 69477,
OrderDate = DateTime.Parse("2014/03/09"),
SaleAmount = 14200,
Terms = "15 Days",
TotalAmount = 14500,
CustomerStoreState = "California",
CustomerStoreCity = "Anaheim",
Employee = "Harv Mudd"
},
new Order {
ID = 46,
OrderNumber = 72947,
OrderDate = DateTime.Parse("2014/01/14"),
SaleAmount = 13350,
Terms = "30 Days",
TotalAmount = 13650,
CustomerStoreState = "Nevada",
CustomerStoreCity = "Las Vegas",
Employee = "Harv Mudd"
},
new Order {
ID = 47,
OrderNumber = 73088,
OrderDate = DateTime.Parse("2014/03/25"),
SaleAmount = 8600,
Terms = "30 Days",
TotalAmount = 8850,
CustomerStoreState = "Nevada",
CustomerStoreCity = "Reno",
Employee = "Clark Morgan"
},
new Order {
ID = 50,
OrderNumber = 76927,
OrderDate = DateTime.Parse("2014/04/27"),
SaleAmount = 9800,
Terms = "30 Days",
TotalAmount = 10050,
CustomerStoreState = "Utah",
CustomerStoreCity = "Salt Lake City",
Employee = "Clark Morgan"
},
new Order {
ID = 51,
OrderNumber = 77297,
OrderDate = DateTime.Parse("2014/04/30"),
SaleAmount = 10850,
Terms = "30 Days",
TotalAmount = 11100,
CustomerStoreState = "Arizona",
CustomerStoreCity = "Phoenix",
Employee = "Clark Morgan"
},
new Order {
ID = 56,
OrderNumber = 84744,
OrderDate = DateTime.Parse("2014/02/10"),
SaleAmount = 4650,
Terms = "30 Days",
TotalAmount = 4750,
CustomerStoreState = "Nevada",
CustomerStoreCity = "Las Vegas",
Employee = "Harv Mudd"
},
new Order {
ID = 57,
OrderNumber = 85028,
OrderDate = DateTime.Parse("2014/05/17"),
SaleAmount = 2575,
Terms = "30 Days",
TotalAmount = 2625,
CustomerStoreState = "Nevada",
CustomerStoreCity = "Reno",
Employee = "Clark Morgan"
},
new Order {
ID = 59,
OrderNumber = 87297,
OrderDate = DateTime.Parse("2014/04/21"),
SaleAmount = 14200,
Terms = "30 Days",
CustomerStoreState = "Wyoming",
CustomerStoreCity = "Casper",
Employee = "Todd Hoffman"
},
new Order {
ID = 60,
OrderNumber = 88027,
OrderDate = DateTime.Parse("2014/02/14"),
SaleAmount = 13650,
Terms = "30 Days",
TotalAmount = 14050,
CustomerStoreState = "Utah",
CustomerStoreCity = "Salt Lake City",
Employee = "Clark Morgan"
},
new Order {
ID = 65,
OrderNumber = 94726,
OrderDate = DateTime.Parse("2014/05/22"),
SaleAmount = 20500,
Terms = "15 Days",
TotalAmount = 20800,
CustomerStoreState = "California",
CustomerStoreCity = "San Jose",
Employee = "Jim Packard"
},
new Order {
ID = 66,
OrderNumber = 95266,
OrderDate = DateTime.Parse("2014/03/10"),
SaleAmount = 9050,
Terms = "15 Days",
TotalAmount = 9250,
CustomerStoreState = "Nevada",
CustomerStoreCity = "Las Vegas",
Employee = "Harv Mudd"
},
new Order {
ID = 69,
OrderNumber = 98477,
OrderDate = DateTime.Parse("2014/01/01"),
SaleAmount = 23500,
Terms = "15 Days",
TotalAmount = 23800,
CustomerStoreState = "Wyoming",
CustomerStoreCity = "Casper",
Employee = "Todd Hoffman"
},
new Order {
ID = 70,
OrderNumber = 99247,
OrderDate = DateTime.Parse("2014/02/08"),
SaleAmount = 2100,
Terms = "15 Days",
TotalAmount = 2150,
CustomerStoreState = "Utah",
CustomerStoreCity = "Salt Lake City",
Employee = "Clark Morgan"
},
new Order {
ID = 78,
OrderNumber = 174884,
OrderDate = DateTime.Parse("2014/04/10"),
SaleAmount = 7200,
Terms = "30 Days",
TotalAmount = 7350,
CustomerStoreState = "Colorado",
CustomerStoreCity = "Denver",
Employee = "Todd Hoffman"
},
new Order {
ID = 81,
OrderNumber = 188877,
OrderDate = DateTime.Parse("2014/02/11"),
SaleAmount = 8750,
Terms = "30 Days",
TotalAmount = 8900,
CustomerStoreState = "Arizona",
CustomerStoreCity = "Phoenix",
Employee = "Clark Morgan"
},
new Order {
ID = 82,
OrderNumber = 191883,
OrderDate = DateTime.Parse("2014/02/05"),
SaleAmount = 9900,
Terms = "30 Days",
TotalAmount = 10150,
CustomerStoreState = "California",
CustomerStoreCity = "Los Angeles",
Employee = "Harv Mudd"
},
new Order {
ID = 83,
OrderNumber = 192474,
OrderDate = DateTime.Parse("2014/01/21"),
SaleAmount = 12800,
Terms = "30 Days",
TotalAmount = 13100,
CustomerStoreState = "California",
CustomerStoreCity = "Anaheim",
Employee = "Harv Mudd"
},
new Order {
ID = 84,
OrderNumber = 193847,
OrderDate = DateTime.Parse("2014/03/21"),
SaleAmount = 14100,
Terms = "30 Days",
TotalAmount = 14350,
CustomerStoreState = "California",
CustomerStoreCity = "San Diego",
Employee = "Harv Mudd"
},
new Order {
ID = 85,
OrderNumber = 194877,
OrderDate = DateTime.Parse("2014/03/06"),
SaleAmount = 4750,
Terms = "30 Days",
TotalAmount = 4950,
CustomerStoreState = "California",
CustomerStoreCity = "San Jose",
Employee = "Jim Packard"
},
new Order {
ID = 86,
OrderNumber = 195746,
OrderDate = DateTime.Parse("2014/05/26"),
SaleAmount = 9050,
Terms = "30 Days",
TotalAmount = 9250,
CustomerStoreState = "Nevada",
CustomerStoreCity = "Las Vegas",
Employee = "Harv Mudd"
},
new Order {
ID = 87,
OrderNumber = 197474,
OrderDate = DateTime.Parse("2014/03/02"),
SaleAmount = 6400,
Terms = "30 Days",
TotalAmount = 6600,
CustomerStoreState = "Nevada",
CustomerStoreCity = "Reno",
Employee = "Clark Morgan"
},
new Order {
ID = 88,
OrderNumber = 198746,
OrderDate = DateTime.Parse("2014/05/09"),
SaleAmount = 15700,
Terms = "30 Days",
TotalAmount = 16050,
CustomerStoreState = "Colorado",
CustomerStoreCity = "Denver",
Employee = "Todd Hoffman"
},
new Order {
ID = 91,
OrderNumber = 214222,
OrderDate = DateTime.Parse("2014/02/08"),
SaleAmount = 11050,
Terms = "30 Days",
TotalAmount = 11250,
CustomerStoreState = "Arizona",
CustomerStoreCity = "Phoenix",
Employee = "Clark Morgan"
}
};
}
}
.widget-container {
width: calc(100% - 360px);
height: 100%;
margin-right: 320px;
position: absolute;
z-index: 1501;
}
.dx-fieldset,
.dx-field {
width: 100%;
height: calc(100% - 60px);
}
.options {
padding: 20px;
background-color: rgba(191, 191, 191, 0.15);
position: absolute;
right: 0;
top: 0;
bottom: 0;
width: 260px;
}
.caption {
font-weight: 500;
font-size: 18px;
}
.option {
margin-top: 10px;
}
#gridContainer {
padding: 10px;
height: 300px;
}
#grid {
border: 1px solid black;
}
.no-left-handle .dx-resizable-handle-top,
.no-left-handle .dx-resizable-handle-bottom {
left: 10px;
width: calc(100% - 10px);
}
.no-right-handle .dx-resizable-handle-top,
.no-right-handle .dx-resizable-handle-bottom {
right: 10px;
width: calc(100% - 10px);
}
.no-right-handle.no-left-handle .dx-resizable-handle-top,
.no-right-handle.no-left-handle .dx-resizable-handle-bottom {
left: 10px;
width: calc(100% - 20px);
}
.no-top-handle .dx-resizable-handle-right,
.no-top-handle .dx-resizable-handle-left {
top: 10px;
height: calc(100% - 10px);
}
.no-bottom-handle .dx-resizable-handle-right,
.no-bottom-handle .dx-resizable-handle-left {
bottom: 10px;
height: calc(100% - 10px);
}
.no-top-handle.no-bottom-handle .dx-resizable-handle-left,
.no-top-handle.no-bottom-handle .dx-resizable-handle-right {
top: 10px;
height: calc(100% - 20px);
}
.dx-resizable-handle-right {
border-right: 1px dotted #999;
}
.dx-resizable-handle-top {
border-top: 1px dotted #999;
}
.dx-resizable-handle-left {
border-left: 1px dotted #999;
}
.dx-resizable-handle-bottom {
border-bottom: 1px dotted #999;
}
.dx-resizable-handle::after {
content: "";
position: absolute;
width: 9px;
height: 9px;
border: none;
border-radius: 50%;
background-color: #fff;
box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.24);
}
.dx-resizable-handle-right::after {
top: 50%;
right: -5px;
transform: translateY(-50%);
}
.dx-resizable-handle-left::after {
top: 50%;
left: -5px;
transform: translateY(-50%);
}
.dx-resizable-handle-corner-top-left::after {
top: -4px;
left: -4px;
}
.dx-resizable-handle-corner-top-right::after {
top: -4px;
right: -4px;
}
.dx-resizable-handle-corner-bottom-left::after {
bottom: -4px;
left: -4px;
}
.dx-resizable-handle-corner-bottom-right::after {
bottom: -4px;
right: -4px;
}
.dx-resizable-handle-top::after {
top: -5px;
left: 50%;
transform: translateX(-50%);
}
.dx-resizable-handle-bottom::after {
bottom: -5px;
left: 50%;
transform: translateX(-50%);
}
You can display resize handles on edges or corners. Use the following keywords to set up the handles property: top, bottom, left, and right. If you specify two adjacent sides (for example, "bottom right"), the control displays a handle in the corner.
The keepAspectRatio property specifies whether a corner handle resizes content proportionally. Set this property to false to allow free-form resize operations.