BoldSignEasily embed eSignatures in your .NET applications. Free sandbox with native SDK available.
@(Html.EJ().Grid<object>("Grid")
.Datasource(ds => ds.Json((IEnumerable<object>)ViewBag.dataSource).UpdateURL("CellEditUpdate").InsertURL("CellEditInsert").RemoveURL("CellEditDelete").Adaptor(AdaptorType.RemoteSaveAdaptor))
.AllowPaging()
.ClientSideEvents(eve =>{eve.ActionComplete("complete");
eve.ActionFailure("failure");
})
.EditSettings(edit => { edit.AllowAdding().AllowDeleting().AllowEditing(); })
.Columns(col =>
{
. . .
}))
<script>
function complete(args) {
alert("success")
}
function failure(args) {
var str = "";
str = ($($(args.error.error.responseText).find('b')[0]).text() + ":" + $(args.error.error.responseText).find('i').text());
window.alert(str)//alert message for the exception
} |
@{Html.EJ().Grid<object>("Grid")
.Datasource(ds => ds.Json((IEnumerable<object>)ViewBag.data)
.UpdateURL("/Home/ExternalUpdate")
.InsertURL("/Home/ExternalInsert")
.RemoveURL("/Home/ExternalDelete")
.Adaptor(AdaptorType.RemoteSaveAdaptor))
.. .
. ..
.ClientSideEvents(eve =>
{
eve.ActionComplete("onComplete");
eve.Load("onLoad");
})
.. . .
. . .
}
<script>
var customadaptor = new ej.remoteSaveAdaptor().extend({
processResponse: function (data, ds, query, xhr, request, changes) {
if (!ej.isNullOrUndefined(data.msg))
alert(data.msg);
return this.base.processResponse.apply(this, [data, ds, query, xhr, request, changes]);
}
});
function onLoad(args) {
this.model.dataSource.adaptor = new customadaptor();//extend the adaptor
}
</script>
public ActionResult ExternalDelete(int key)
{
. . .
. . .
return Json(new { data = data, msg = "Unable To delete the record" });
} |
Thanks for support.
Problem is fixed with this solution.
one more Issue is that, if i get an error message. my selected row is deleted from the grid.
now i want when i got an error message from server, selected row will not be deleted from the grid.
@{Html.EJ().Grid<object>("Grid")
.Datasource(ds => ds.Json((IEnumerable<object>)Request.RequestContext.HttpContext.Session["data"])
.UpdateURL("/Home/ExternalUpdate")
.InsertURL("/Home/ExternalInsert")
.RemoveURL("/Home/ExternalDelete")
.Adaptor(AdaptorType.RemoteSaveAdaptor))
. . .
. . .
.ClientSideEvents(eve =>
{
eve.ActionComplete("onComplete");
eve.Load("onLoad");
})
. . .
. . .
}
<script>
window.localData = []
function onComplete(args) {
if (args.requestType == "delete") {
this.dataSource(ej.DataManager({
json: localData,
insertUrl: "/Home/ExternalUpdate",
updateUrl: "/Home/ExternalInsert",
removeUrl: "/Home/ExternalDelete",
adaptor: new customadaptor()
}))
}
}
var customadaptor = new ej.remoteSaveAdaptor().extend({
processResponse: function (data, ds, query, xhr, request, changes) {
if (!ej.isNullOrUndefined(data.msg)) {
window.localData = data.data;
alert(data.msg);
}
return this.base.processResponse.apply(this, [data, ds, query, xhr, request, changes]);
}
});
function onLoad(args) {
this.model.dataSource.adaptor = new customadaptor();//extend the adaptor
}
</script>
public ActionResult ExternalDelete(int key)
{
Orders ord = order.Where(or => or.OrderID == key).FirstOrDefault();
var data = order;
if(key % 2 == 0)
return Json(new { data = data, msg = "Unable To delete the record" });
order.Remove(ord);
return Json(new { data = data, msg = "Deleted the record" });
} |
@{Html.EJ().Grid<object>("Grid")
.Datasource(ds => ds.Json((IEnumerable<object>)Request.RequestContext.HttpContext.Session["data"])
.UpdateURL("/Home/ExternalUpdate")
.InsertURL("/Home/ExternalInsert")
.RemoveURL("/Home/ExternalDelete")
.Adaptor(AdaptorType.RemoteSaveAdaptor))
. . .
. . .
.ClientSideEvents(eve =>
{
eve.ActionComplete("onComplete");
eve.Load("onLoad");
eve.ActionFailure("Failure")
})
. . .
. . .
}
<script>
window.localData = []
function onComplete(args) {
if (args.requestType == "delete") {
this.dataSource(ej.DataManager({
json: localData,
insertUrl: "/Home/ExternalUpdate",
updateUrl: "/Home/ExternalInsert",
removeUrl: "/Home/ExternalDelete",
adaptor: new customadaptor()
}))
}
}
var customadaptor = new ej.remoteSaveAdaptor().extend({
processResponse: function (data, ds, query, xhr, request, changes) {
if (!ej.isNullOrUndefined(data.msg)) {
window.localData = data.data;
alert(data.msg);
}
return this.base.processResponse.apply(this, [data, ds, query, xhr, request, changes]);
}
});
function onLoad(args) {
this.model.dataSource.adaptor = new customadaptor();//extend the adaptor
}
function failure(args) {
var gridObj = $(".e-grid").data("ejGrid");
gridObj.refreshContent();
}
Server side:-
public ActionResult ExternalDelete(int key)
{
Orders ord = order.Where(or => or.OrderID == key).FirstOrDefault();
var data = order;
if (key % 2 == 0)
return Json(new { data = data, msg = "Unable To delete the record" });
order.Remove(ord);
return Json(new { data = data, msg = "Deleted the record" });
}
|
<button id="btn" onclick="Save()">Click to save changes</button>
<div id="Grid"></div>
<script type="text/javascript">
$(function () {
var data = @(Html.Raw(Json.Encode(@Request.RequestContext.HttpContext.Session["data"])));
$("#Grid").ejGrid({
dataSource: ej.DataManager({
json: data,
adaptor: new ej.remoteSaveAdaptor(),
batchUrl:"/Home/BatchUpdate"
}),
allowPaging:true,
actionFailure: "Failure",
...
columns: [
...
],
load:"load",
});
});
</script>
<script type="text/javascript">
function load(args) {
this.model.dataSource.adaptor = new customAdaptor();
}
function Failure(args){
alert("delete failed. Please press the cancel icon to retrieve the deleted record");
}
var customAdaptor = new ej.remoteSaveAdaptor().extend({
batchRequest: function (dm, changes, e) {
var obj = []
obj.push(changes);
var res = {
changed: changes.changed,
added: changes.added,
deleted: changes.deleted,
action: "batch",
table: e.url,
key: e.key
};
return {
type: "POST",
url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.url,
contentType: "application/json; charset=utf-8",
dataType: "json",
ejPvtData: obj,
data: JSON.stringify(res)
};
},
processResponse: function (data, ds, query, xhr, request, changes) {
var i;
var pvt = request && request.ejPvtData;
if(request != undefined){
for (i = 0; i < changes.added.length; i++)
ej.JsonAdaptor.prototype.insert(ds, changes.added[i]);
for (i = 0; i < changes.changed.length; i++)
ej.JsonAdaptor.prototype.update(ds, "OrderID", changes.changed[i]);
for (i = 0; i < changes.deleted.length; i++)
ej.JsonAdaptor.prototype.remove(ds, "OrderID", changes.deleted[i]);
} // updated the data after modification in grid
return this.base.processResponse.apply(this, [data, ds, query, xhr, request, changes]);
}
});
function Save(){
var grid = $("#Grid").ejGrid("instance");
grid.batchSave();
}
</script>
[HomeController.cs]
public ActionResult BatchUpdate(List<EditableOrder> added,List<EditableOrder> changed, List<EditableOrder> deleted)
{
...
if (deleted != null)
{
throw new Exception("TEST"); //making to fail the post when deleting action takes place
}
...
} |