[]
MVC Controls offers an advanced client-side API, which includes methods, events and properties that allow you to update or modify the controls at client-side. The client-side API provided by the MVC Edition is implemented using JavaScript. The JavaScript code which implements the client API can be embedded in the view file or embedded as a resource file. This enables the user to develop coherent web applications by combining server-side and client-side processing.
Once a control is initialized on the server side, it can be fetched as an object on the client-side either by using the control ID or using "sender" parameter of an event. Once you fetch the object, you can now access its members on the client-side. For instance, the following code illustrates how to fetch the FlexGrid control on client side using object on the client-side using FlexGrid control "ID" and access its members on the client-side as shown in the following code. Moreover, you can cast the object to FlexGrid type using the cast method and use the IntelliSense.
//Fetch the FlexGrid object on client side using the 'Id'.
var gridObj = wijmo.Control.getControl("#fg");
//Cast the object to FlexGrid type using the cast method and get the intellisense working.
var flex = wijmo.grid.FlexGrid.cast(gridObj);
Similarly, you can fetch the FlexGrid control on client side using the "sender" event parameter and use IntelliSense with the help of cast method.
<script>
//Define event handler function for the client side event "selectionChanged"
//which is bind using the server side method "OnClientSelectionChanged"
function gridSelectionChange(s, e) {
//Fetch the FlexGrid control on client side using the 'sender' event parameter
//and get the intellisense working using the cast method.
var flex1 = wijmo.grid.FlexGrid.cast(s);
var cv = flex1.collectionView;
var amt2 = document.getElementById('lblAmt2');
var active = document.getElementById('lblActive');
var discount = document.getElementById('lblDisc');
if (cv.currentItem) {
amt2.innerText = cv.currentItem.Amount2;
active.innerText = cv.currentItem.Active;
discount.innerText = cv.currentItem.Discount;
}
}
//Bind client side event "formatItem" using addHandler
c1.documentReady(function () {
flex.formatItem.addHandler(function(s, e) {
if (e.panel.cellType == wijmo.grid.CellType.Cell && e.panel.columns[e.col].binding == "Amount") {
var val = e.panel.grid.getCellData(e.row, e.col, false); //Invoke client side method
if (val < 1000)
e.cell.style.color = 'red';
}
});
});
</script>
@ * Instantiate FlexGrid and set its properties * @
@(Html.C1().FlexGrid < Sale > ().Id("fg")
.AutoGenerateColumns(false)
.Width(700)
.AllowAddNew(true)
.SelectionMode(C1.Web.Mvc.Grid.SelectionMode.Cell)
.CssClass("grid")
.Bind(Model)
.Columns(bl => {
bl.Add(cb => cb.Binding("ID"));
bl.Add(cb => cb.Binding("Start"));
bl.Add(cb => cb.Binding("Product"));
bl.Add(cb => cb.Binding("Amount").Format("c"));
bl.Add(cb => cb.Binding("Discount").Format("p0"));
bl.Add(cb => cb.Binding("Active"));
})
.OnClientSelectionChanged("gridSelectionChange") // Bind the client side "selectionChanged" event
)
<br/>
<br/>
<div>
<label> Amount2: </label>
<label id = "lblAmt2"> </label>
<br/>
<label> Active: </label>
<label id = "lblActive"> </label>
<br/>
<label> Discount: </label>
<label id = "lblDisc" > </label>
</div>
You can invoke a client-side method in a same way you invoke a method in any other .NET applications. For instance, we invoked the getCellData client-side method in the above example.