Editing Events

FlexGrid has several events related to editing.

This example shows how you can use two of them:

  • beginningEdit: Prevent editing overdue items by setting the cancel parameter to true.
  • cellEditEnding: Prevent entering negative amounts for the 'sales' and 'expenses' columns.
 
ID
Country
Sales
Expenses
Overdue
0
US
81,732.54
38,401.13
1
Germany
20,603.32
27,944.24
2
UK
44,217.79
48,877.49
3
Japan
29,190.63
23,365.74
4
Sweden
46,951.19
49,107.56
5
Norway
86,237.02
49,767.35
6
Denmark
31,459.18
40,845.40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// This file locates: "Scripts/Lesson/C1FlexGrid/CustomEditing.js".
c1.documentReady(function () {
    var theGrid = wijmo.Control.getControl('#theGrid');
 
    theGrid.beginningEdit.addHandler(function(s, e) {
        var col = s.columns[e.col];
        if (col.binding != 'Overdue') {
            var item = s.rows[e.row].dataItem;
            if (item.Overdue) { // prevent editing overdue items
                e.cancel = true;
                showMessage('Overdue items cannot be edited');
            }
        }
    });
    theGrid.cellEditEnding.addHandler(function (s, e) {
        showMessage(' ');
        var col = s.columns[e.col];
        if (col.binding == 'Sales' || col.binding == 'Expenses') {
            var value = wijmo.changeType(s.activeEditor.value, wijmo.DataType.Number, col.format);
            if (!wijmo.isNumber(value) || value < 0) { // prevent negative sales/expenses
                e.cancel = true;
                showMessage('Please enter a positive amount');
            }
        }
    });
 
    // show log message
    var elLog = document.getElementById('log');
    function showMessage(msg) {
        elLog.innerHTML = msg;
    }
});
1
2
3
4
5
6
7
// This file locates: "Content/css/Lesson/C1FlexGrid/CustomEditing.css".
#log {
  font-style: italic;
  text-align: center;
  margin-bottom: 10px;
  opacity: .5;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
using System.Web.Mvc;
 
namespace LearnMvcClient.Controllers
{
    public partial class C1FlexGridController : Controller
    {
        // GET: CustomEditing
        public ActionResult CustomEditing()
        {
            return View(Models.FlexGridData.GetSales(Models.FlexGridData.Countries7));
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
@model IEnumerable<FlexGridData.Sale>
 
<h1>
    @Html.Raw(Resources.C1FlexGrid.CustomEditing_Title)
</h1>
<p>
    @Html.Raw(Resources.C1FlexGrid.CustomEditing_Text1)
</p>
<p>
    @Html.Raw(Resources.C1FlexGrid.CustomEditing_Text2)
</p>
<ul>
    <li>
        @Html.Raw(Resources.C1FlexGrid.CustomEditing_Text3)
    </li>
    <li>
        @Html.Raw(Resources.C1FlexGrid.CustomEditing_Text4)
    </li>
</ul>
<div id="log">
    @Html.Raw(Resources.C1FlexGrid.CustomEditing_Text5)
</div>
@(Html.C1().FlexGrid().Id("theGrid").Height(200)
    .AutoGenerateColumns(false)
    .Bind(Model)
    .Columns(cs =>
    {
        cs.Add().Binding("Id").Header("ID").Width("50").IsReadOnly(true);
        cs.Add().Binding("Country").Header("Country").IsRequired(true);
        cs.Add().Binding("Sales").Header("Sales").Format("n2");
        cs.Add().Binding("Expenses").Header("Expenses").Format("n2");
        cs.Add().Binding("Overdue").Header("Overdue");
    })
)