Jqgrid not binding after returning json text - json

Unable to bind my JQgrid, below is my code:
Trying to bind some data to jqgrid through controller using Json but not able to bind the grid. attached my code below.
Controller Class:
public class TransactionTypeController : Controller
{
//
// GET: /TransactionType/
public ActionResult Index(EMM_New.Models.TransactionTypeModal TransactionType)
{
List<EMM_New.Models.TransactionTypeEntity> lst = TransactionType.GetTransactionType();
ViewBag.TransactionTypeData = lst;
return View();
}
public ActionResult GetGridData(string sidx, string sord, int page, int rows)
{
return Content(JsonHelper.JsonForJqgrid(GetDataTable(sidx, sord, page, rows), rows, GetTotalCount(), page), "application/json");
}
public DataTable GetDataTable(string sidx, string sord, int page, int pageSize)
{
int startIndex = (page - 1) * pageSize;
int endIndex = page * pageSize;
DataTable table = new DataTable();
table.Columns.Add("CustomerID", typeof(int));
table.Columns.Add("ContactName", typeof(string));
table.Columns.Add("Address", typeof(string));
table.Columns.Add("City", typeof(string));
table.Columns.Add("PostalCode", typeof(string));
//
// Here we add five DataRows.
//
table.Rows.Add(25, "Ramesh", "Combivent", "Bangalore", "463456");
table.Rows.Add(50, "Sam", "Enebrel", "Hosur", "463456");
table.Rows.Add(10, "Christoff", "Hydralazine", "Bangalore", "463456");
table.Rows.Add(21, "Janet", "Combivent", "Hosur", "463456");
table.Rows.Add(100, "Melanie", "Dilantin", "Bangalore", "463456");
return table;
}
public int GetTotalCount() {
return 10;
}
}
JsonHelper Class:
public class JsonHelper
{
public static string JsonForJqgrid(DataTable dt, int pageSize, int totalRecords, int page)
{
int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.Append("{");
jsonBuilder.Append("\"total\":" + totalPages + ",\"page\":" + page + ",\"records\":" + (totalRecords) + ",\"rows\"");
jsonBuilder.Append(":[");
for (int i = 0; i < dt.Rows.Count; i++)
{
jsonBuilder.Append("{\"i\":" + (i) + ",\"cell\":[");
for (int j = 0; j < dt.Columns.Count; j++)
{
jsonBuilder.Append("\"");
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append("\",");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("]},");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("]");
jsonBuilder.Append("}");
return jsonBuilder.ToString();
}
}
View:
<table id="list" class="scroll" >
</table>
<div id="pager" class="scroll" style="text-align: center;">
</div>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery("#list").jqGrid({
url: '/TransactionType/GetGridData/',
datatHomeype: 'json',
mtype: 'GET',
colNames: ['Customer ID', 'Contact Name', 'Address', 'City', 'Postal Code'],
colModel: [
{ name: 'CustomerID', index: 'CustomerID', width: 100, align: 'left' },
{ name: 'ContactName', index: 'ContactName', width: 150, align: 'left' },
{ name: 'Address', index: 'Address', width: 300, align: 'left' },
{ name: 'City', index: 'City', width: 150, align: 'left' },
{ name: 'PostalCode', index: 'PostalCode', width: 100, align: 'left' }
],
pager: jQuery('#pager'),
rowNum: 10,
rowList: [5, 10, 20, 50],
sortname: 'CustomerID',
sortorder: "asc",
viewrecords: true,
caption: 'JqGrid from class Binding'
}).navGrid(pager, { edit: false, add: false, del: false, refresh: true, search: true });
});
</script>
Able to see the Jqgrid, but data is not populating....What i'm doing worng.Please some help me in sorting this out..

datatHomeype: 'json'?
Should be datatype: 'json'
Try to change your json like this:
{"total":1,"page":"1","records":10,"rows":[{"cell":["25","Ram","Combivent","Bangalore","463456"]}]}

Related

Ajax Response Capitalizations Rules

A was using DataTables plugin, and when displaying my columns I needed to put the first letter to LowerCase for it to recognize the property/object, e.g:
// Object name is actually: EngineeringChange.Responsible
{
title: "Responsible",
data: "engineeringChange.responsible",
className: "columnName columnHeader",
},
I just assumed the first letter would always be capitalized to LowerCase. I tried creating a new property inside EngineeringChange named ECRNumber, so I tried:
{
title: "ECR Number",
data: "engineeringChange.eCRNumber",
className: "columnName columnHeader",
},
Isn't recognized as a parameter... After a bit of searching I find out the Json response I get on AJAX it's called ecrNumber. So now I'm actually lost on which are the rules that are automatically applied to the Json Response. How does it turn ecr to LowerCase and Number to UpperCase (the N)??
Edit
Sry, can´t think of any easy way to exactly reproduce my problem on a demo
TableDesign/Creation
table = $('#tblEntries2').DataTable({
order: [[0, 'desc']],
deferRender: true,
ajax: {
url: '#Url.Action("GetEntries", "AlteracaoEngenharia")',
method: 'GET',
dataSrc: '',
beforeSend: function () {
onBegin();
$content.hide();
$loader.show();
},
complete: function (jsonResponse) {
console.log(jsonResponse);
onComplete();
$loader.hide();
$content.fadeIn();
$('#ExcelExport').show();
table.column(5).visible(false);
table.column(6).visible(false);
table.column(7).visible(false);
table.column(9).visible(false);
table.column(10).visible(false);
table.column(11).visible(false);
}
},
dom: "<'row'<'col-2'l><'col-7 text-center'B><'col-3'f>>" +
"<'row'<'col-12'tr>>" +
"<'row'<'col-5'i><'col-7'p>>",
lengthMenu: [
[10, 25, 50, 100, -1],
['10', '25', '50', '100', 'Todos'],
],
columns: [
{
title: "Id (yr-id)",
data: "creationYear",
className: "columnNumber columnHeader",
},
{
title: "ECR Number",
data: "engineeringChange.ecrNumber",
className: "columnNumber columnHeader",
},
{
title: "Criador Alteração de Engenharia",
data: "engineeringChange.responsible",
className: "columnName columnHeader",
},
...
Handler
public IActionResult GetEntries()
{
GetDataEntries();
int count = 0;
int currentYear = 0;
foreach (var entry in EntriesList)
{
EngineeringChangesListViewModel h = new EngineeringChangesListViewModel
{
EngineeringChange = entry
};
if (currentYear != entry.DataCriacao.Year)
{
count = 1;
currentYear = entry.DataCriacao.Year;
}
else
{
count++;
}
h.DeadLine = entry.FinishedGood.Week + " - " + entry.DataCriacao.Year.ToString();
if (entry.OldPart == null)
{
h.EngineeringChange.OldPart = new Part();
}
if (entry.NewPart == null)
{
h.EngineeringChange.NewPart = new Part();
}
if (entry.FinishedGood == null)
{
h.EngineeringChange.FinishedGood = new FinishedGood();
}
if (entry.OldPart != null && entry.OldPart.CDP.HasValue)
h.OldPartValue = entry.OldPart.CDP * entry.OldPart.Stock;
if (entry.NewPart != null && entry.NewPart.CDP.HasValue)
h.NewPartValue = entry.NewPart.CDP * entry.NewPart.Stock;
h.EngineeringChange.ECRNumber = entry.ECRNumber;
//toString("D4") padds the number to always be 4 digits
h.CreationYear = entry.DataCriacao.Year.ToString() + "_" + count.ToString("D4");
h.IdYear = count;
EntriesListaViewModel.Add(h);
}
var errorsJson = JsonConvert.SerializeObject(EntriesListaViewModel);
Console.WriteLine(errorsJson);
return new JsonResult(EntriesListaViewModel);
}
HANDLER OUTPUT
[{"CreationYear":"2021_0001","IdYear":1,"OldPartValue":null,"NewPartValue":2061.09155,"DeadLine":"15 - 2021","EngineeringChange":{"Id":8,"DataCriacao":"2021-03-11T16:15:24.6630956","Responsible":"José António","ECRNumber":"X1232","State":"Aberto","Comment":"Teste","UserId":1,"User":null,"Component":null,"FinishedGood":{"Id":31,"Week":15,"EngineeringChangeId":8},"OldPart":{"Id":5,"Reference":"FS12848AC","Stock":null,"CDP":1.43584776,"LastExpired":null},"NewPart":{"Id":6,"Reference":"FS12848AD","Stock":1650,"CDP":1.24914646,"LastExpired":"2021-03-11T00:00:00"},"Transformation":{"Id":188,"Possible":true,"Cost":1090.0,"WillBeTransformed":true,"TransformationDate":"2021-03-13T08:48:00","Responsible":"Miguel","EngineeringChangeId":8}}},]
PAGE/AJAX OUTPUT outputs are created by console.log() and Console.WriteLine() displayed above.
ECRNumber gets named to ecrNumber...

How can i populate json data into charts using ajax call?

I want to pass json data to jsp and populate into the charts data. How can i do this?
Previously i am setting data value by sending each value using model attribute.
In EmployeeController i have lineBarChart method like this :-
#RequestMapping("/lineBar")
public String lineBarChart(Model model)
{
List<Employee> emp = employeeMapper.getAllEmployees();
int cseCount = 0;
int ecCount = 0;
int itCount = 0;
int cseSalary = 0;
int ecSalary = 0;
int itSalary = 0;
for (int j = 0; j < emp.size(); j++)
{
if (emp.get(j).getDepartment().equalsIgnoreCase("CSE"))
{
cseSalary += emp.get(j).getSalary();
cseCount++;
}
else if (emp.get(j).getDepartment().equalsIgnoreCase("IT"))
{
itSalary += emp.get(j).getSalary();
itCount++;
}
else
{
ecSalary += emp.get(j).getSalary();
ecCount++;
}
}
Map<Integer, Integer> map = new HashMap<>();
map.put(cseCount, cseSalary);
map.put(ecCount, ecSalary);
map.put(itCount, itSalary);
GsonBuilder gsonMapBuilder = new GsonBuilder();
Gson gsonObject = gsonMapBuilder.create();
String jsonObject = gsonObject.toJson(map);
System.out.println(jsonObject);
// Previously i am doing this now i want to send json to chart
model.addAttribute("cse", cseCount);
model.addAttribute("ec", ecCount);
model.addAttribute("it", itCount);
model.addAttribute("cseSalary", cseSalary);
model.addAttribute("itSalary", itSalary);
model.addAttribute("ecSalary", ecSalary);
return "lineBarChart";
}
Here is lineBarChart.jsp :-
<script>
$(function()
{
var lineBarChart = new CanvasJS.Chart("lineBarChartContainer",
{
animationEnabled: true,
theme: "light2",
title:
{
text: "Branch wise total Employee Salary",
fontSize: 20,
fontFamily: "Trebuchet MS",
fontWeight: "bold",
margin: 10
},
axisY:
{
title: "Number of Employee",
suffix: " K"
},
data:
[{
type: "column",
dataPoints:
[
{ y: ${cse}, label: "CSE" },
{ y: ${ec}, label: "EC" },
{ y: ${it}, label: "IT" }
]
},
{
type: "line",
toolTipContent: "{label}: {y}K",
showInLegend: true,
dataPoints:
[
{ y: ${cseSalary}/10000, label: "CSE" },
{ y: ${ecSalary}/10000, label: "EC" },
{ y: ${itSalary}/10000, label: "IT" }
]
}]
});
lineBarChart.render();
});
</script>
<div class="card shadow p-3 bg-white rounded">
<div class="card-body">
<div id="lineBarChartContainer" style="height: 240px; width: 100%;"></div>
</div>
</div>
I am calling lineBarChart.jsp file from another jsp using ajax call.
Like this :-
<div class="row" >
<div class="col-md-6 p-1">
<div id="lineBarGraph"></div>
</div>
</div>
$.ajax({url: "lineBar",
async: false,
success: function(result)
{
console.log(result);
$("#lineBarGraph").html(result);
}
});
You will need to create a 2nd handler method or controller.
The existing controller will simply load the JSP so all the logic can be removed from that. The new controller method will have the logic to load and return the data requested by your Ajax call and will look like the below.
Note the #ResponseBody annotation.
Update you Ajax call to request the new path fetchChartDataor whatever you want it to be:
#RequestMapping("/fetchChartData", produces="application/json")
public #ResponseBody String getChartData()
{
List<Employee> emp = employeeMapper.getAllEmployees();
int cseCount = 0;
int ecCount = 0;
int itCount = 0;
int cseSalary = 0;
int ecSalary = 0;
int itSalary = 0;
for (int j = 0; j < emp.size(); j++)
{
if (emp.get(j).getDepartment().equalsIgnoreCase("CSE"))
{
cseSalary += emp.get(j).getSalary();
cseCount++;
}
else if (emp.get(j).getDepartment().equalsIgnoreCase("IT"))
{
itSalary += emp.get(j).getSalary();
itCount++;
}
else
{
ecSalary += emp.get(j).getSalary();
ecCount++;
}
}
Map<Integer, Integer> map = new HashMap<>();
map.put(cseCount, cseSalary);
map.put(ecCount, ecSalary);
map.put(itCount, itSalary);
//you could remove the below and return the map directly
GsonBuilder gsonMapBuilder = new GsonBuilder();
Gson gsonObject = gsonMapBuilder.create();
return gsonObject.toJson(map);
}
You could simplify further by changing the method return type to Map<Integer, Integer> and return this directly. Spring Boot will handle the serialization to Json using the configured Json library:
https://www.callicoder.com/configuring-spring-boot-to-use-gson-instead-of-jackson/

JQGgrid- How to generate a pdf / excel file from the grid data

I have the following JQGrid table, which is being generated from JSON data. I want to be able to generate/export or create a pdf file based on the table data state that is view able. I am using JSON , Jqgrid and Javascript
How do I generate a pdf file from the data ?
Here My FIDDLE
JS CODE
$(document).ready(function() {
var jsonData = {
"Name": "Julie Brown",
"Account": "C0010",
"LoanApproved": "12/5/2015",
"LastActivity": "4/1/2016",
"PledgedPortfolio": "4012214.00875",
"MaxApprovedLoanAmt": "2050877.824375",
"LoanBalance": "1849000",
"AvailableCredit": "201877.824375",
"Aging": "3",
"Brokerage": "My Broker",
"Contact": "Robert L. Johnson",
"ContactPhone": "(212) 902-3614",
"RiskCategory": "Yellow",
"rows": [{
"ClientID": "C0010",
"Symbol": "WEC",
"Description": "Western Electric Co",
"ShareQuantity": "20638",
"SharePrice": "21.12",
"TotalValue": "435874.56",
"LTVCategory": "Equities",
"LTVRatio": "50%",
"MaxLoanAmt": "217937.28"
}, {
"ClientID": "C0010",
"Symbol": "BBB",
"Description": "Bins Breakers and Boxes",
"ShareQuantity": "9623",
"SharePrice": "74.29125",
"TotalValue": "714904.69875",
"LTVCategory": "Equities",
"LTVRatio": "50%",
"MaxLoanAmt": "357452.349375"
}, {
"ClientID": "C0010",
"Symbol": "GPSC",
"Description": "Great Plains Small Cap Stock",
"ShareQuantity": "49612",
"SharePrice": "14.24",
"TotalValue": "706474.88",
"LTVCategory": "Mutual Funds - Small Cap",
"LTVRatio": "40%",
"MaxLoanAmt": "282589.952"
}]
},
mmddyyyy = "";
/*********************************************************************/
$("#output").jqGrid({
url: "/echo/json/",
mtype: "POST",
datatype: "json",
postData: {
json: JSON.stringify(jsonData)
},
colModel: [
/** { name: 'ClientID', label:'ClientID',width: 80, key: true },****/
{
name: 'Symbol',
width: 65
}, {
name: 'Description',
width: 165
}, {
name: 'ShareQuantity',
align: 'right',
width: 85,
classes: "hidden-xs", labelClasses: "hidden-xs",
formatter: 'currency',
formatoptions: {
prefix: " ",
suffix: " "
}
}, {
name: 'SharePrice',
label: 'Share Price',
align: 'right',
width: 100,
classes: "hidden-xs", labelClasses: "hidden-xs",
template: "number",
formatoptions: {
prefix: " $",
decimalPlaces: 4
}
},
/*{ label: 'Value1',
name: 'Value1',
width: 80,
sorttype: 'number',
formatter: 'number',
align: 'right'
}, */
{
name: 'TotalValue',
label: 'Total Value',
width: 160,
sorttype: 'number',
align: "right",
search: false,
formatter: 'currency',
formatoptions: {
prefix: " $",
suffix: " "
}
}, {
name: 'LTVRatio',
label: 'LTV Ratio',
width: 70,
sorttype: 'number',
align: "right",
formatter: 'percentage',
formatoptions: {
prefix: " ",
suffix: " "
}
}, {
name: 'LTVCategory',
label: 'LTV Category',
classes: "hidden-xs", labelClasses: "hidden-xs",
width: 120,
width: 165
},
{
name: 'MaxLoanAmt',
label: 'MaxLoanAmount',
width: 165,
sorttype: 'number',
align: "right",
search: false,
formatter: 'currency',
formatoptions: {
prefix: " $",
suffix: " "
}
}
],
additionalProperties: ["Symbol", "Description"],
subGrid: true,
subGridRowExpanded: function (subgridDivId, rowid) {
var item = $(this).jqGrid("getLocalRow", rowid);
$("#" + $.jgrid.jqID(subgridDivId)).html("Symbol: <em>" + item.Symbol +
"</em><br/>Description: <em>" + item.Description + "</em>");
},
beforeProcessing: function (data) {
var symbolsMap = {}, symbolsValues = ":All", rows = data.rows, i, symbol;
for (i = 0; i < rows.length; i++) {
symbol = rows[i].Symbol;
if (!symbolsMap.hasOwnProperty(symbol)) {
symbolsMap[symbol] = 1;
symbolsValues += ";" + symbol + ":" + symbol;
}
}
$(this).jqGrid("setColProp", 'Symbol', {
stype: "select",
searchoptions: {
value: symbolsValues
}
}).jqGrid('destroyFilterToolbar')
.jqGrid('filterToolbar', {
stringResult: true,
searchOnEnter: false,
defaultSearch : "cn"
});
},
/*beforeProcessing: function (data) {
var item, i, n = data.length;
for (i = 0; i < n; i++) {
item = data[i];
item.Quantity = parseFloat($.trim(item.Quantity).replace(",", ""));
item.LTVRatio = parseFloat($.trim(item.LTVRatio *10000).replace(",", ""));
item.Value = parseFloat($.trim(item.Value).replace(",", ""));
item.Num1 = parseInt($.trim(item.Num1).replace(",", ""), 10);
item.Num2 = parseInt($.trim(item.Num2).replace(",", ""), 10);
}
}, */
iconSet: "fontAwesome",
loadonce: true,
rownumbers: true,
cmTemplate: {
autoResizable: true,
editable: true
},
autoResizing: {
compact: true
},
autowidth: true,
height: 'auto',
forceClientSorting: true,
sortname: "Symbol",
footerrow: true,
caption: "<b>Collateral Value</b> <span class='pull-right' style='margin-right:20px;'>Valuation as of: " + mmddyyyy + "</span>",
loadComplete: function() {
var $self = $(this),
sum = $self.jqGrid("getCol", "Price", false, "sum"),
sum1 = $self.jqGrid("getCol", "MaxLoanAmt", false, "sum");
//ltvratio = $self.jqGrid("getCol","LTVRatio:addas", "Aved Loan Amount");
$self.jqGrid("footerData", "set", {
LTVCategory: "Max Approved Loan Amount:",
Price: sum,
MaxLoanAmt: sum1
});
}
});
$("#output").jqGrid('filterToolbar', {stringResult: true, searchOnEnter: false, defaultSearch : "cn"});
$(window).on("resize", function () {
var newWidth = $("#output").closest(".ui-jqgrid").parent().width();
$("#output").jqGrid("setGridWidth", newWidth, true);
}).triggerHandle("resize");
});
There is no build in method to export jqgrid data to pdf. You have to use third party tools( I personally like iTextSharp which can be downloaded from Here . You have to create action method for printing the grid data in your controller.
Here is also another one example one guy made.
Here is also another example in trirand. If you see the source code they are using iTextHsarp.
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using JQGridMVCExamples.Models;
using Trirand.Web.Mvc;
using System.IO;
//
// For PDF export we are using the free open-source iTextSharp library.
//
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.Data;
namespace JQGridMVCExamples.Controllers.Grid
{
public partial class GridController : Controller
{
// This is the default action for the View. Use it to setup your grid Model.
public ActionResult ExportPDF()
{
// Get the model (setup) of the grid defined in the /Models folder.
var gridModel = new OrdersJqGridModel();
var ordersGrid = gridModel.OrdersGrid;
// Setting the DataUrl to an action (method) in the controller is required.
// This action will return the data needed by the grid
ordersGrid.DataUrl = Url.Action("PDFGrid_DataRequested");
// customize the default Orders grid model with custom settings
// NOTE: you need to call this method in the action that fetches the data as well,
// so that the models match
SetPDFExportGrid(ordersGrid);
// Pass the custmomized grid model to the View
return View(gridModel);
}
// This method is called when the grid requests data
public JsonResult PDFGrid_DataRequested()
{
// Get both the grid Model and the data Model
// The data model in our case is an autogenerated linq2sql database based on Northwind.
var gridModel = new OrdersJqGridModel();
var northWindModel = new NorthwindDataContext();
// customize the default Orders grid model with our custom settings
SetPDFExportGrid(gridModel.OrdersGrid);
// Save the current grid state in Session
// We will later need it for PDF Export
JQGridState gridState = gridModel.OrdersGrid.GetState();
Session["gridState"] = gridState;
// return the result of the DataBind method, passing the datasource as a parameter
// jqGrid for ASP.NET MVC automatically takes care of paging, sorting, filtering/searching, etc
return gridModel.OrdersGrid.DataBind(northWindModel.Orders);
}
public JsonResult PDFExport_AutoCompleteShipName(string term)
{
var northWindModel = new NorthwindDataContext();
JQAutoComplete autoComplete = new JQAutoComplete();
autoComplete.DataField = "ShipName";
autoComplete.AutoCompleteMode = AutoCompleteMode.BeginsWith;
autoComplete.DataSource = from o in northWindModel.Orders
select o;
return autoComplete.DataBind();
}
private void SetPDFExportGrid(JQGrid ordersGrid)
{
// show the search toolbar
ordersGrid.ToolBarSettings.ShowSearchToolBar = true;
ordersGrid.ToolBarSettings.ShowSearchButton = true;
var orderDateColumn = ordersGrid.Columns.Find(c => c.DataField == "OrderDate");
orderDateColumn.DataFormatString = "{0:yyyy/MM/dd}";
orderDateColumn.SearchType = SearchType.DatePicker;
orderDateColumn.DataType = typeof(DateTime);
orderDateColumn.SearchControlID = "DatePicker";
orderDateColumn.SearchToolBarOperation = SearchOperation.IsEqualTo;
var shipNameColumn = ordersGrid.Columns.Find(c => c.DataField == "ShipName");
shipNameColumn.SearchType = SearchType.AutoComplete;
shipNameColumn.DataType = typeof(string);
shipNameColumn.SearchControlID = "AutoComplete";
shipNameColumn.SearchToolBarOperation = SearchOperation.Contains;
var orderIDColumns = ordersGrid.Columns.Find(c => c.DataField == "OrderID");
orderIDColumns.Searchable = true;
orderIDColumns.DataType = typeof(int);
orderIDColumns.SearchToolBarOperation = SearchOperation.IsEqualTo;
SetPDFCustomerIDSearchDropDown(ordersGrid);
SetPDFFreightSearchDropDown(ordersGrid);
}
private void SetPDFCustomerIDSearchDropDown(JQGrid ordersGrid)
{
// setup the grid search criteria for the columns
JQGridColumn customersColumn = ordersGrid.Columns.Find(c => c.DataField == "CustomerID");
customersColumn.Searchable = true;
// DataType must be set in order to use searching
customersColumn.DataType = typeof(string);
customersColumn.SearchToolBarOperation = SearchOperation.IsEqualTo;
customersColumn.SearchType = SearchType.DropDown;
// Populate the search dropdown only on initial request, in order to optimize performance
if (ordersGrid.AjaxCallBackMode == AjaxCallBackMode.RequestData)
{
var northWindModel = new NorthwindDataContext();
var searchList = from customers in northWindModel.Customers
select new SelectListItem
{
Text = customers.CustomerID,
Value = customers.CustomerID
};
customersColumn.SearchList = searchList.ToList<SelectListItem>();
customersColumn.SearchList.Insert(0, new SelectListItem { Text = "All", Value = "" });
}
}
private void SetPDFFreightSearchDropDown(JQGrid ordersGrid)
{
// setup the grid search criteria for the columns
JQGridColumn freightColumn = ordersGrid.Columns.Find(c => c.DataField == "Freight");
freightColumn.Searchable = true;
// DataType must be set in order to use searching
freightColumn.DataType = typeof(decimal);
freightColumn.SearchToolBarOperation = SearchOperation.IsGreaterOrEqualTo;
freightColumn.SearchType = SearchType.DropDown;
// Populate the search dropdown only on initial request, in order to optimize performance
if (ordersGrid.AjaxCallBackMode == AjaxCallBackMode.RequestData)
{
List<SelectListItem> searchList = new List<SelectListItem>();
searchList.Add(new SelectListItem { Text = "> 10", Value = "10" });
searchList.Add(new SelectListItem { Text = "> 30", Value = "30" });
searchList.Add(new SelectListItem { Text = "> 50", Value = "50" });
searchList.Add(new SelectListItem { Text = "> 100", Value = "100" });
freightColumn.SearchList = searchList.ToList<SelectListItem>();
freightColumn.SearchList.Insert(0, new SelectListItem { Text = "All", Value = "" });
}
}
public ActionResult ExportToPDF(string exportType)
{
var gridModel = new OrdersJqGridModel();
var northWindModel = new NorthwindDataContext();
var grid = gridModel.OrdersGrid;
// Get the last grid state the we saved before in Session in the DataRequested action
JQGridState gridState = Session["GridState"] as JQGridState;
// Need to set grid options again
SetExportGrid(grid);
if (String.IsNullOrEmpty(exportType))
exportType = "1";
DataTable exportData;
switch (exportType)
{
case "1":
grid.ExportSettings.ExportDataRange = ExportDataRange.All;
exportData = grid.GetExportData(northWindModel.Orders);
ExportToPDF(exportData);
break;
case "2":
grid.ExportSettings.ExportDataRange = ExportDataRange.Filtered;
exportData = grid.GetExportData(northWindModel.Orders, gridState);
ExportToPDF(exportData);
break;
case "3":
grid.ExportSettings.ExportDataRange = ExportDataRange.FilteredAndPaged;
exportData = grid.GetExportData(northWindModel.Orders, gridState);
ExportToPDF(exportData);
break;
}
return View();
}
private void ExportToPDF(DataTable dt)
{
//
// For PDF export we are using the free open-source iTextSharp library.
//
Document pdfDoc = new Document();
MemoryStream pdfStream = new MemoryStream();
PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDoc, pdfStream);
pdfDoc.Open();//Open Document to write
pdfDoc.NewPage();
Font font8 = FontFactory.GetFont("ARIAL", 7);
PdfPTable PdfTable = new PdfPTable(dt.Columns.Count);
PdfPCell PdfPCell = null;
//Add Header of the pdf table
for (int column = 0; column < dt.Columns.Count; column++)
{
PdfPCell = new PdfPCell(new Phrase(new Chunk(dt.Columns[column].Caption, font8)));
PdfTable.AddCell(PdfPCell);
}
//How add the data from datatable to pdf table
for (int rows = 0; rows < dt.Rows.Count; rows++)
{
for (int column = 0; column < dt.Columns.Count; column++)
{
PdfPCell = new PdfPCell(new Phrase(new Chunk(dt.Rows[rows][column].ToString(), font8)));
PdfTable.AddCell(PdfPCell);
}
}
PdfTable.SpacingBefore = 15f; // Give some space after the text or it may overlap the table
pdfDoc.Add(PdfTable); // add pdf table to the document
pdfDoc.Close();
pdfWriter.Close();
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "attachment; filename=gridexport.pdf");
Response.BinaryWrite(pdfStream.ToArray());
Response.End();
}
}
}

problem with Toolbar Paging Extjs 4&Json

I'm using ExtJS4 to develop some rich interfaces. I'm a beginner with ExtJS and I i have some problems. I have 100 records and I want to show 20 records per page. I have done this code, but its only showing 20 recording in all pages. I have verified in firebug if I have all my data: I have only 20 and my Total is equal to 100. I need help please.
Webservice page:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class Service : System.Web.Services.WebService
{
public class DataGridSource
{
public List<MyDvpt> maListe = new List<MyDvpt>();
private int _total;
public int Total
{
get { return _total; }
set { _total = value; }
}
}
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true, XmlSerializeString = false)]
public DataGridSource GetMyDvpt3(int pageSize, int pageNumber)
{
string connectionString = "Data source=DARWIN;Initial Catalog=AGREO_DVPT;User ID=temp;Password=pmet";
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand("SELECT TOP 100 E.NOM_EXP,ESP.NOM_ESP,V.NOM_VAR,P.SURF_PG,P.DD_CYCLE_PROD from gc.PG P inner join ADM.EXP E on E.ID_EXP = P.ID_EXP inner join GC.VAR V on V.ID_VAR = P.ID_VAR inner join GC.ESP ESP on ESP.ID_ESP = V.ID_ESP", connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
List<MyDvpt> list1 = new List<MyDvpt>();
while (reader.Read())
{
MyDvpt dev = new MyDvpt();
dev.NOM_EXP = reader[0].ToString();
dev.NOM_ESP = reader[1].ToString();
dev.NOM_VAR = reader[2].ToString();
dev.SURF_PG = reader[3].ToString();
dev.DD_CYCLE_PROD = reader[4].ToString();
list1.Add(dev);
}
return new DataGridSource { maListe = list1.Skip(pageSize * pageNumber).Take(pageSize).ToList<MyDvpt>(), Total = list1.Count };
}
public class MyDvpt
{
public string NOM_EXP { get; set; }
public string NOM_ESP { get; set; }
public string NOM_VAR { get; set; }
public string SURF_PG { get; set; }
public string DD_CYCLE_PROD { get; set; }
private string _total;
public string Total
{
get { return _total; }
set { _total = value; }
}
}
}
JS page:
function onReady() {
store = new Ext.data.JsonStore({
autoLoad: true,
pageSize: 20,
pageNumber: 1,
groupField: 'NOM_VAR',
proxy: ({
type: 'ajax',
url: '../Service.asmx/GetMyDvpt3?pageSize=20 &pageNumber=1',
reader: {
type: 'json',
root: 'd.maListe',
totalProperty: 'd.Total'
},
headers: {
'Content-type': 'application/json'
}
}),
fields: ['NOM_EXP', 'NOM_ESP', 'NOM_VAR', 'SURF_PG', 'DD_CYCLE_PROD']
});
store.loadPage(1);
var groupingFeature = Ext.create('Ext.grid.feature.Grouping', {
groupHeaderTpl: 'NOM_VAR: {NOM_ESP} ({rows.length} enregistrement{[values.rows.length > 1 ? "s" : ""]})'
});
Ext.create('Ext.grid.Panel', {
store: store,
id:'grid',
collapsible: true,
frame: true,
iconCls: 'icon-grid',
features: [groupingFeature],
columnLines: true,
columns: [
{ dataIndex: 'NOM_EXP', header: 'NOM_EXP', flex: 1 },
{ dataIndex: 'NOM_ESP', header: 'NOM_ESP', flex: 1 },
{ dataIndex: 'NOM_VAR', header: 'NOM_VAR', flex: 1 },
{ dataIndex: 'SURF_PG', header: 'SURF_PG', flex: 1 },
{ dataIndex: 'DD_CYCLE_PROD', header: 'DD_CYCLE_PROD', flex: 1 }
],
fbar: ['->', {
text: 'Clear Grouping',
iconCls: 'icon-clear-group',
handler: function () {
groupingFeature.disable();
}
}],
renderTo: 'panel',
viewConfig: {
stripeRows: true
},
title: 'Dvpt Grid',
width: 1220,
height: 500,
dockedItems: [{
xtype: 'pagingtoolbar',
store: store,
dock: 'bottom',
displayInfo: true
}]
});
}
store.load() response in firebug:
GET http://localhost:1508/Service.asmx/GetMyDvpt3?pa...22NOM_VAR%22%2C%22direction%22%3A%22ASC%22%7D%5D
{"d":{"_type":"MaquetteExtJs.Service+DataGridSource","maListe":[{"_type":"MaquetteExtJs.Service+MyDvpt","NOM_EXP":"DECKERT","NOM_ESP":"Blé Dur Hiver","NOM_VAR":"AMBRAL","SURF_PG":"30000","DD_CYCLE_PROD":"26/02/2003 00:00:00","Total":null},
...
{"__type":"MaquetteExtJs.Service+MyDvpt","NOM_EXP":"DECKERT","NOM_ESP":"Blé Dur Hiver","NOM_VAR":"SOLDUR","SURF_PG":"25000","DD_CYCLE_PROD":"06/03/2002 00:00:00","Total":null}],"Total":"100"}}
d Object { __type="MaquetteExtJs.Service+DataGridSource", maListe=[20], Total="100"}
Currently your response is like this...
{"d":{"_type":"MaquetteExtJs.Service+DataGridSource","maListe":[{"_type":"MaquetteExtJs.Service+MyDvpt","NOM_EXP":"DECKERT","NOM_ESP":"Blé Dur Hiver","NOM_VAR":"AMBRAL","SURF_PG":"30000","DD_CYCLE_PROD":"26/02/2003 00:00:00","Total":null}, ... {"__type":"MaquetteExtJs.Service+MyDvpt","NOM_EXP":"DECKERT","NOM_ESP":"Blé Dur Hiver","NOM_VAR":"SOLDUR","SURF_PG":"25000","DD_CYCLE_PROD":"06/03/2002 00:00:00","Total":null}],"Total":"100"}}
But it should be like this...
{"_type":"MaquetteExtJs.Service+DataGridSource","maListe":[{"_type":"MaquetteExtJs.Service+MyDvpt","NOM_EXP":"DECKERT","NOM_ESP":"Blé Dur Hiver","NOM_VAR":"AMBRAL","SURF_PG":"30000","DD_CYCLE_PROD":"26/02/2003 00:00:00","Total":null}, ... {"__type":"MaquetteExtJs.Service+MyDvpt","NOM_EXP":"DECKERT","NOM_ESP":"Blé Dur Hiver","NOM_VAR":"SOLDUR","SURF_PG":"25000","DD_CYCLE_PROD":"06/03/2002 00:00:00","Total":null}],"Total":"100"}
Also you need to update your JsonReader config in your JsonStore..
proxy: ({
type: 'ajax',
url: '../Service.asmx/GetMyDvpt3?pageSize=20 &pageNumber=1',
reader: {
type: 'json',
root: 'maListe',
totalProperty: 'Total'
}
}),
Try keeping old json response and store root property (root: 'd.maListe') and modify the totalProperty : 'Total'

jqGrid + ASP.NET WebForm (C#) Search abilities

Ohoy there!
I've been struggling with this problem for days, and I'm really starting to loose my temper about this!
I had managed to get informations parsed back to the grid, which can be sorted, but when I'm trying filtering the results, it gets a little bit messy..
I have been programming C# for about 4-5 months, but my Web Forms, Javascript and JQuery (including JSON) is only about 14 days or so, so maybe it's something very basics I do wrong - please be!!
First, I'm wondering if this is the correct JSON-syntax?
{"grid":{"_search":true,"nd":1291150141196,"rows":20,"page":1,"sidx":"Name","sord":"asc","filters":"{\"groupOp\":\"AND\",\"rules\":[{\"field\":\"Phone\",\"op\":\"eq\",\"data\":\"2343444\"}]}"}}
Those backslashes seems incorrect to me, and I've tried filtering them at server side, but no luck - again, only 14 days of experience.
Error message:
"System.InvalidOperationException"
"Cannot convert object of type 'System.String' to type 'Filter'"
" at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)\r\n at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)\r\n at System.Web.Script.Serialization.ObjectConverter.AssignToPropertyOrField(Object propertyValue, Object o, String memberName, JavaScriptSerializer serializer, Boolean throwOnError)\r\n at System.Web.Script.Serialization.ObjectConverter.ConvertDictionaryToObject(IDictionary`2 dictionary, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)\r\n at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)\r\n at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)\r\n at System.Web.Script.Services.WebServiceMethodData.StrongTypeParameters(IDictionary`2 rawParams)\r\n at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary`2 parameters)\r\n at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)"
My WebMethod:
[WebMethod]
[ScriptMethod]
public string GetAll(GridSettings grid) {
var query = from p in dc.Customers select p;
//if (grid._search)
// if (grid.filters.groupOp == "AND")
// {
// foreach (var rule in grid.filters.Rules)
// query = query.Where<Customers>(rule.field, rule.data, rule.oper);
// }
// else if (grid.filters.groupOp == "OR")
// {
// var temp = (new List<Customers>()).AsQueryable();
// foreach (var rule in grid.filters.Rules)
// {
// var t = query.Where<Customers>(rule.field, rule.data, rule.oper);
// temp = temp.Concat<Customers>(t);
// }
// query = temp.Distinct<Customers>();
// }
query = query.OrderBy<Customers>(grid.sidx, grid.sord);
List<Customer> result = new List<Customer>();
foreach (var x in query)
{
Customer y = new Customer();
y.Phone = x.Phone;
y.Name = x.Name;
y.Address = x.Address;
y.Postal = x.Postal;
y.City = x.City;
y.Date = x.Date.ToString("dd-MM-yy");
result.Add(y);
}
return JsonConvert.SerializeObject(new PagedList(result, result.Count(), 1, 20));
}
}
Even through I don't think it's necessarily, (server side don't filter atm.):
public class Customer
{
public string Phone { get; set; }
public string Name { get; set; }
public string Address { get; set;}
public string Postal { get; set; }
public string City { get; set; }
public string Date { get; set; }
}
public class GridSettings
{
public bool _search { get; set; }
public Filter filters { get; set; }
public long nd { get; set; }
public int rows { get; set; }
public int page { get; set; }
public string sidx { get; set; }
public string sord { get; set; }
}
public class Filter
{
public string groupOp { get; set; }
public Rule[] Rules { get; set; }
public static Filter Create(string json)
{
try
{
return JsonConvert.DeserializeObject<Filter>(json);
}
catch
{
return null;
}
}
}
public class Rule
{
private Dictionary<string, WhereOperation> operations = new Dictionary<string, WhereOperation> {
{ "eq",WhereOperation.Equal },
{ "ne",WhereOperation.NotEqual },
{ "cn",WhereOperation.Contains }
};
public string field { get; set; }
public string op { set; get; }
public WhereOperation oper { get { return operations[op]; } }
public string data { get; set; }
}
public static class LinqExtensions
{
public static IQueryable<T> OrderBy<T>(this IQueryable<T> query, string sortColumn, string direction)
{
ParameterExpression parameter = Expression.Parameter(query.ElementType, "p");
MemberExpression memberAccess = null;
string methodName = string.Format("OrderBy{0}", direction.ToLower() == "asc" ? "" : "descending");
foreach (var property in sortColumn.Split('.'))
{
memberAccess = MemberExpression.Property(memberAccess ?? (parameter as Expression), property);
}
LambdaExpression orderByLambda = Expression.Lambda(memberAccess, parameter);
MethodCallExpression result = Expression.Call(
typeof(Queryable),
methodName,
new[] { query.ElementType, memberAccess.Type },
query.Expression,
Expression.Quote(orderByLambda));
return query.Provider.CreateQuery<T>(result);
}
public static IQueryable<T> Where<T>(this IQueryable<T> query, string column, object value, WhereOperation operation)
{
try
{
if (string.IsNullOrEmpty(column))
return query;
ParameterExpression parameter = Expression.Parameter(query.ElementType, "p");
MemberExpression memberAccess = null;
foreach (var property in column.Split('.'))
memberAccess = Expression.Property(memberAccess ?? (parameter as Expression), property);
if (memberAccess == null)
return query.Where(p => true);
Expression conditional = Expression.Call(null, typeof(LinqExtensions).GetMethod("Comparer"), Expression.Convert(memberAccess, typeof(object)), Expression.Convert(Expression.Constant(value), typeof(object)), Expression.Constant(operation));
MethodCallExpression result = Expression.Call(typeof(Queryable), "Where", new[] { query.ElementType }, query.Expression, Expression.Lambda(conditional, parameter));
return query.Provider.CreateQuery<T>(result);
}
catch
{
return query.Where(p => true);
}
}
public static bool Comparer(this object value1, object value2, WhereOperation operation)
{
string strValue1 = value1.ToString().ToLowerInvariant().Trim();
string strValue2 = value2.ToString().ToLowerInvariant().Trim();
double dblValue1 = -1;
double dblValue2 = -1;
bool areNumbers = double.TryParse(strValue1, out dblValue1) && double.TryParse(strValue2, out dblValue2);
switch (operation)
{
case WhereOperation.Equal:
return areNumbers ? dblValue1 == dblValue2 : strValue1 == strValue2;
case WhereOperation.NotEqual:
return areNumbers ? dblValue1 != dblValue2 : strValue1 != strValue2;
case WhereOperation.Contains:
return strValue1.Contains(strValue2);
}
return true;
}
}
public enum WhereOperation
{
Equal, NotEqual, Contains
}
public class StringValueAttribute : System.Attribute
{
private string _value;
public StringValueAttribute(string value)
{
_value = value;
}
public string Value
{
get { return _value; }
}
}
public class PagedList
{
IEnumerable _rows;
int _totalRecords;
int _pageIndex;
int _pageSize;
object _userData;
public PagedList(IEnumerable rows, int totalRecords, int pageIndex, int pageSize, object userData)
{
_rows = rows;
_totalRecords = totalRecords;
_pageIndex = pageIndex;
_pageSize = pageSize;
_userData = userData;
}
public PagedList(IEnumerable rows, int totalRecords, int pageIndex, int pageSize)
: this(rows, totalRecords, pageIndex, pageSize, null)
{
}
public int total { get { return (int)Math.Ceiling((decimal)_totalRecords / (decimal)_pageSize); } }
public int page { get { return _pageIndex; } }
public int records { get { return _totalRecords; } }
public IEnumerable rows { get { return _rows; } }
public object userData { get { return _userData; } }
public override string ToString()
{
return JsonConvert.SerializeObject(this);
}
}
Any finally Javascript:
$(function () {
$("#CustomerList").dialog({
autoOpen: false,
show: "explode",
width: 720,
height: 450,
open: function () {
$("#CustomerListTable").jqGrid({
datatype: function (pdata) { getListData(pdata, 'Customers', '#CustomerListTable'); },
colNames: ['Telefon', 'Navn', 'Adresse', 'Post', 'By', 'CVR'],
colModel: [
{ name: 'Phone', width: 70, sortable: true, searchoptions: { sopt: ['eq', 'ne', 'cn']} },
{ name: 'Name', width: 200, sortable: true, searchoptions: { sopt: ['eq', 'ne', 'cn']} },
{ name: 'Address', width: 200, sortable: true, searchoptions: { sopt: ['eq', 'ne', 'cn']} },
{ name: 'Postal', width: 60, sortable: true, searchoptions: { sopt: ['eq', 'ne', 'cn']} },
{ name: 'City', width: 100, sortable: true, searchoptions: { sopt: ['eq', 'ne', 'cn']} },
{ name: 'CVR', width: 70, sortable: true, searchoptions: { sopt: ['eq', 'ne', 'cn']} }
],
caption: "",
height: 360,
loadonce: true,
scroll: 1,
pager: '#CustomerListPager',
gridview: true,
sortname: 'Name',
sortorder: 'asc'
});
$("#CustomerListTable").jqGrid('navGrid', '#CustomerListPager', { del: false, add: false, edit: false }, {}, {}, {}, { multipleSearch: true });
}
});
});
function getListData(pdata, controller, table) {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "Controls/" + controller + ".asmx/GetAll",
data: "{\"grid\":" + JSON.stringify(pdata) + "}",
dataType: "json",
success: function (data, textStatus) {
if (textStatus == "success") RecievedData(JSON.parse(getMain(data)).rows, table);
},
error: function (data, textStatus) {
alert("Error fetching data");
}
});
}
function RecievedData(data, table) {
var thegrid = $(table);
thegrid.clearGridData();
for (var i = 0; i < data.length; i++) thegrid.addRowData(i + 1, data[i]);
thegrid.removeClass("jqgrid-overlay");
}
function getMain(data) {
if (data.hasOwnProperty("d")) return data.d;
else return data;
}
The solution I have this far, is the result of hours and hours of Goggle, reading and experimenting... I'm going about to going nuts!!
Oh and while I'm here - why on earth does the jqGrid search-button show up X times in the #CustomerListPager, when closing / opening the dialog, and why doesn't it request the datas again? I have to refresh the page everytime - which mainly is the reason why I'm using JQuery - i want to avoid that ;)
Thanks for your time if you have read so far - I'm appreciating this!
Happy december!
Nicky.
I do it like this and it loads the data as well as search can be performed easily.
this is the function which is called to load the jqgrid
function FillGrid(WebMethodString, GridName, PagerName, columnModel, columnNames, header)
{
// debugger;
jQuery(GridName).GridUnload();
jQuery.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: WebMethodString,
data: '{}', //PageMethod Parametros de entrada
datatype: "json",
success: function(msg) {
$('#dvWait').css('display', 'block');
// Do interesting things here.
// debugger;
var mydata = jQuery.parseJSON(msg.d);
//console.log(mydata);
jQuery(GridName).jqGrid({
datatype: "local",
data: mydata,
colNames: columnNames,
colModel: columnModel,
pager: jQuery(PagerName),
rowNum: 25,
mtype: "GET",
pagination: true,
scrollOffset: 0,
rowList: [10, 20, 25],
sortname: "WorkOrderID",
scroll: 1,
sortorder: "desc",
multiselect: false,
viewrecords: true,
caption: header,
autowidth: true,
ignoreCase: true,
height: 580,
jsonReader: {
repeatItem: false,
root: function (obj) { return obj.d.rows; },
page: function (obj) { return obj.d.page; },
total: function (obj) { return obj.d.total; },
records: function (obj) { return obj.d.records; }
},
afterInsertRow: function(rowid, rowdata, rowelem) {
jQuery(GridName).setCell(rowid, 'WorkOrderID', '', '', { title: '', onclick: 'DisappearPopup(event);' });
jQuery(GridName).setCell(rowid, 'Requester', '', '', { title: '', onclick: 'DisappearPopup(event);' });
jQuery(GridName).setCell(rowid, 'AssignedTo', '', '', { title: '', onclick: 'DisappearPopup(event);' });
jQuery(GridName).setCell(rowid, 'SummaryText', '', '', { title: '', onclick: 'DisappearPopup(event);' });
jQuery(GridName).setCell(rowid, 'CreationDate', '', '', { title: '', onclick: 'DisappearPopup(event);' });
},
gridComplete: function() {
$('#dvMaintbl').css('visibility', 'visible');
$('#dvWait').css('display', 'none');
}
})
jQuery(GridName).jqGrid('navGrid', PagerName,
{
edit: false,
add: false,
del: false,
searchtext: 'Search',
refreshtext: 'Reload'
});
}
});
}
Add this code in .aspx page
<script type="text/javascript">
// debugger;
jQuery(document).ready(function() {
FillGrid('Json.asmx/GetAllTroubleTickets', '#grid', '#pager', "put your column model here", "put your column names here", "put header text here");
});
</script>
Following is my web service call:
Public Function GetAllTroubleTickets() As String
Dim strStatus As String = HttpContext.Current.Request.QueryString("status")
Dim page As Integer = 1
If HttpContext.Current.Request.Form("page") IsNot Nothing Then
page = Integer.Parse(HttpContext.Current.Request.Form("page").ToString())
End If
Dim rp As Integer = 1
If HttpContext.Current.Request.Form("rowNum") IsNot Nothing Then
rp = Integer.Parse(HttpContext.Current.Request.Form("rowNum").ToString())
End If
Dim start As Integer = ((Page - 1) * rp)
If (strStatus = Nothing) Then
strStatus = "2"
End If
Dim dsDatos As DataSet = GetAllTroubleTicketsclass("", "WorkOrderID asc", "1", "4000", "", Convert.ToInt16(strStatus))
Dim result As String = Jayrock.Json.Conversion.JsonConvert.ExportToString(dsDatos.Tables(0).Rows)
Return result
End Function