BoldSignEasily embed eSignatures in your .NET applications. Free sandbox with native SDK available.
<ej-grid id="FlatGrid" allow-paging="true" action-complete="complete" allow-sorting="true">
<e-columns>
--------
</e-columns>
</ej-grid>
<script >
function complete(args) {
if (args.requestType == "batchsave") {
// get the page number from server side and pass it as parameter to gotoPage method
this.gotoPage(page);
}
}
</script>
|
public static List<Order> orddata = new List<Order>();
public static List<Order> sorteddata = new List<Order>();
//initially set id to -1
id = -1;
public ActionResult DataSource([FromBody]DataManager dm)
{
IEnumerable data = orddata;
DataOperations operation = new DataOperations();
if (dm.Sorted != null && dm.Sorted.Count > 0) //Sorting
{
data = operation.PerformSorting(data, dm.Sorted);
sorteddata = data.Cast<Order>().ToList();
}
if (dm.Where != null && dm.Where.Count > 0) //Filtering
{
data = operation.PerformWhereFilter(data, dm.Where, dm.Where[0].Operator);
}
int count = data.Cast<Order>().Count();
if(!(id.Equals(-1)))
{
// find the element that is edited first
var value = sorteddata.FindIndex(orddata => orddata.OrderID == id);
decimal frac = value / dm.Take;
int num = Convert.ToInt32(Math.Floor(frac)) + 1;
page = num; //page number of first edited record
int skipValue = (page - 1) * dm.Take;
if (skipValue >= 0)
{
dm.Skip = skipValue;
data = operation.PerformSkip(data, dm.Skip);
data = operation.PerformTake(data, dm.Take);
int count = data.Cast<Order>().Count();
}
}
else
{
if (dm.Skip != 0)
{
data = operation.PerformSkip(data, dm.Skip);
}
if (dm.Take != 0)
{
data = operation.PerformTake(data, dm.Take);
}
int count = data.Cast<Order>().Count();
page = 1;
}
return Json(new { result = data, count = count, currentPage = page });
}
public ActionResult BatchUpdate([FromBody]submitvalue myObject)
{
if (myObject.Changed != null && myObject.Changed.Count > 0)
{
foreach (var temp in myObject.Changed)
{
var ord = temp;
Order val = orddata.Where(or => or.OrderID == ord.OrderID).FirstOrDefault();
}
// get the primarykey of first edited record from myObject.Changed
id = (long)myObject.Changed[0].OrderID;
}
if (myObject.Added != null && myObject.Added.Count > 0)
{
foreach (var temp in myObject.Added)
{
orddata.Insert(0, temp);
}
}
if (myObject.Deleted != null && myObject.Deleted.Count > 0)
{
foreach (var temp in myObject.Deleted)
{
orddata.Remove(orddata.Where(or => or.OrderID == temp.OrderID).FirstOrDefault());
}
}
var data = orddata;
return Json(data);
}
public class submitvalue
{
public List<Order> Added { get; set; }
public List<Order> Changed { get; set; }
public List<Order> Deleted { get; set; }
public object Key { get; set; }
}
public class Order
{
public Order()
{
}
public Order(long OrderId, string CustomerId, int EmployeeId, double Freight, DateTime? OrderDate, string ShipCity)
{
this.OrderID = OrderId;
this.CustomerID = CustomerId;
this.EmployeeID = EmployeeId;
this.Freight = Freight;
this.OrderDate = OrderDate;
this.ShipCity = ShipCity;
}
public long? OrderID { get; set; }
public string CustomerID { get; set; }
public int? EmployeeID { get; set; }
public double? Freight { get; set; }
public DateTime? OrderDate { get; set; }
public string ShipCity { get; set; }
}
}
}
In client side
<ej-grid id="FlatGrid" allow-paging="true" allow-sorting="true" before-batch-save="beforeBatchSave" action-complete="complete" load="load">
<e-datamanager url="Home/DataSource" batch-url="Home/BatchUpdate" adaptor="UrlAdaptor" />
<e-edit-settings allow-adding="true" allow-editing="true" allow-deleting="true" edit-mode="@(EditMode.Batch)"></e-edit-settings>
<e-toolbar-settings show-toolbar="true" toolbar-items='@new List<string> {"add","edit","update","cancel"}' />
<e-columns>
</e-columns>
</ej-grid>
<script type="text/javascript">
var customAdaptor = new ej.UrlAdaptor().extend({
processResponse: function (data, ds, query, xhr, request, changes) {
window.flag = data.currentPage; // get page of 1st edited record from server side
return ej.UrlAdaptor.prototype.processResponse(data, ds, query, xhr, request, changes);
}
})
function beforeBatchSave(args) {
// set sorted column for sorting after edit
this.option({sortSettings: {sortedColumns: [{field:"ShipCity", direction:"ascending"}] }})
}
function load(args) {
this.model.dataSource.adaptor = new customAdaptor();
}
function complete(args) {
if (args.requestType == "batchsave") {
if (window.flag) {
var activeItem = $(".e-pager .e-active");
var oldPage = activeItem.eq(0).text();
// get pager element and change the selected value by changing class name
$(".e-numericitem").eq(oldPage - 1).removeClass("e-active e-currentitem");
$(".e-numericitem").eq(oldPage - 1).addClass("e-default");
$(".e-numericitem").eq(window.flag - 1).addClass("e-active e-currentitem");
$(".e-numericitem").eq(window.flag - 1).removeClass("e-default");
var obj = $(".e-grid").data("ejGrid");
// set current page of page setting in grid instance
obj.model.pageSettings.currentPage = window.flag;
window.flag = false;
}
}
}
</script>
|
Hi Chris,Greetings from Syncfusion!QUERY: the navigation on the left hand side of the Syncfusion Javascript API page isn't working. It just shows the spinner.Please answer below question so that we can validate your query,1. Are you unable to access the navigation menu while spinner display in the application?2. Have you set target as navigation menu right pane ?Regards,Padmavathy Kamalanathan
<script type="text/javascript">
function complete(args) {
if (args.requestType == "batchsave") {
if (window.flag) {
var obj = $(".e-grid").data("ejGrid");
var pageCount = obj.model.pageSettings.pageCount;
var activeItem = $(".e-pager .e-active");
var oldPage = activeItem.eq(0).text();
//check if the page to be changed is greater than page count
if (window.flag > pageCount) {
//check if previous current page is greater than pageCount
( i.e the record you have edited is in page number greater than page count)
if (oldPage > pageCount) {
var value = (window.flag / pageCount) - (oldPage / pagecount);
}
else {
var value = (window.flag / pageCount) - 1;
}
for (var i = 0; i < value; i++) {
//window flag used to set args.cancel to true in action-begin
window.flag1 = true;
$(".e-NP").click();
}
$(".e-numericitem").eq(1).removeClass("e-active e-currentitem");
$(".e-numericitem").eq(1).addClass("e-default");
var actualPager = (window.flag % pageCount);
if (actualPager > 0) {
$(".e-numericitem").eq(actualPager - 1).addClass("e-active e-currentitem");
$(".e-numericitem").eq(actualPager - 1).removeClass("e-default");
}
else {
$(".e-numericitem").eq(pageCount).addClass("e-active e-currentitem");
$(".e-numericitem").eq(pageCount).removeClass("e-default");
}
obj.model.pageSettings.currentPage = window.flag;
// actionBegin event
$(".e-pagermsg").prop({ textContent: " 8 of 8 pages (95 items)" })
window.flag = false;
}
else {
// use old code
}
}
}
}
function begin(args) { // actionBegin event
if (args.requestType == "paging" && window.flag1) {
debugger;
args.cancel = true; // cancelling server side action
window.flag1 = false;
}
}
</script>
|
$(".e-pagermsg").prop({ textContent: " 8 of 8 pages (95 items)" })
|