我为JQgrid和ASP.net创建了客户端和服务器端.显示网格但没有数据.我看不出结果.网格显示但没有数据.
服务器端
编码
using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data; using System.Data.sqlClient; using System.Web; using System.Web.Script.Serialization; namespace sample { public struct JQGridResults { public int page; public int total; public int records; public JQGridRow[] rows; } public struct JQGridRow { public int id; public string[] cell; } [Serializable] public class User { public int UserID { get; set; } public string UserName { get; set; } public string FirstName { get; set; } public string MiddleName { get; set; } public string LastName { get; set; } public string EmailID { get; set; } /// <summary> /// Summary description for jqgridhandler /// </summary> public class jqGridHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { HttpRequest request = context.Request; HttpResponse response = context.Response; string _search = request["_search"]; string numberOfRows = request["rows"]; string pageIndex = request["page"]; string sortColumnName = request["sidx"]; string sortOrderBy = request["sord"]; int totalRecords; Collection<User> users = GetUsers(numberOfRows,pageIndex,sortColumnName,sortOrderBy,out totalRecords); string output = BuildJQGridResults(users,Convert.ToInt32(numberOfRows),Convert.ToInt32(pageIndex),Convert.ToInt32(totalRecords)); response.Write(output); } private string BuildJQGridResults(Collection<User> users,int numberOfRows,int pageIndex,int totalRecords) { JQGridResults result = new JQGridResults(); List<JQGridRow> rows = new List<JQGridRow>(); foreach (User user in users) { JQGridRow row = new JQGridRow(); row.id = user.UserID; row.cell = new string[6]; row.cell[0] = user.UserID.ToString(); row.cell[1] = user.UserName; row.cell[2] = user.FirstName; row.cell[3] = user.MiddleName; row.cell[4] = user.LastName; row.cell[5] = user.EmailID; rows.Add(row); } result.rows = rows.ToArray(); result.page = pageIndex; result.total = totalRecords / numberOfRows; result.records = totalRecords; return new JavaScriptSerializer().Serialize(result); } private Collection<User> GetUsers(string numberOfRows,string pageIndex,string sortColumnName,string sortOrderBy,out int totalRecords) { Collection<User> users = new Collection<User>(); string connectionString = ""; using (sqlConnection connection = new sqlConnection(connectionString)) { using (sqlCommand command = new sqlCommand()) { command.Connection = connection; command.CommandText = "select * from tblusers" ; command.CommandType = CommandType.Text; // StoredProcedure; sqlParameter paramPageIndex = new sqlParameter("@PageIndex",sqlDbType.Int); paramPageIndex.Value = Convert.ToInt32(pageIndex); command.Parameters.Add(paramPageIndex); sqlParameter paramColumnName = new sqlParameter("@SortColumnName",sqlDbType.VarChar,50); paramColumnName.Value = sortColumnName; command.Parameters.Add(paramColumnName); sqlParameter paramSortorderBy = new sqlParameter("@SortOrderBy",4); paramSortorderBy.Value = sortOrderBy; command.Parameters.Add(paramSortorderBy); sqlParameter paramNumberOfRows = new sqlParameter("@NumberOfRows",sqlDbType.Int); paramNumberOfRows.Value = Convert.ToInt32(numberOfRows); command.Parameters.Add(paramNumberOfRows); sqlParameter paramTotalRecords = new sqlParameter("@TotalRecords",sqlDbType.Int); totalRecords = 0; paramTotalRecords.Value = totalRecords; paramTotalRecords.Direction = ParameterDirection.Output; command.Parameters.Add(paramTotalRecords); connection.Open(); using (sqlDataReader dataReader = command.ExecuteReader()) { User user; while (dataReader.Read()) { user = new User(); user.UserID = (int)dataReader["UserID"]; user.UserName = Convert.ToString(dataReader["UserName"]); user.FirstName = Convert.ToString(dataReader["FirstName"]); user.MiddleName = Convert.ToString(dataReader["MiddleName"]); user.LastName = Convert.ToString(dataReader["LastName"]); user.EmailID = Convert.ToString(dataReader["EmailID"]); users.Add(user); } } totalRecords = (int)paramTotalRecords.Value; } return users; } } public bool IsReusable { // To enable pooling,return true here. // This keeps the handler in memory. get { return false; } } } } }
客户端
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="sample.aspx.cs" Inherits="sample.WebForm1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <!-- The jQuery UI theme that will be used by the grid --> <link rel="stylesheet" type="text/css" media="screen" href="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.11/themes/redmond/jquery-ui.css" /> <!-- The jQuery UI theme extension jqGrid needs --> <link rel="stylesheet" type="text/css" media="screen" href="themes/ui.jqgrid.css" /> <!-- jQuery runtime minified --> <script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.5.2.min.js" type="text/javascript"></script> <!-- The localization file we need,English in this case --> <script src="js/trirand/i18n/grid.locale-en.js"type="text/javascript"></script> <!-- The jqGrid client-side javascript --> <script src="js/trirand/jquery.jqGrid.min.js" type="text/javascript"></script> <script type="text/javascript"> $(function () { $("#UsersGrid").jqGrid({ url: 'jqGridHandler.ashx',datatype: 'json',height: 250,colNames: ['UserID','UserName','FirstName','MiddleName','LastName','EmailID'],colModel: [ { name: 'UserID',index: 'UserID',width: 100,sortable: true },{ name: 'UserName',{ name: 'FirstName',{ name: 'MiddleName',{ name: 'LastName',{ name: 'EmailID',width: 150,sortable: true } ],rowNum: 10,rowList: [10,20,30],pager: '#UsersGridPager',sortname: 'UserID',viewrecords: true,sortorder: 'asc',caption: 'JSON Example' }); $("#UsersGrid").jqGrid('navGrid','#UsersGridPager',{ edit: false,add: false,del: false }); }); </script> </head> <body> <%--<form id="HtmlForm" runat="server">--%> <table id="UsersGrid" cellpadding="0" cellspacing="0"></table> <div id="UsersGridPager"></div> <%-- </form>--%> </body> </html>
这有什么问题?数据不显示.
谢谢
更新
$(document).ready(function () { $.ajax({ type: 'POST',contentType: "application/json; charset=utf-8",url: "jqGridHandler.ashx",success: function (result) { var JQResult = JSON.parse(result); colD = JQResult.colData; colN = JQResult.colNames; var colM = JQResult.colModel; alert(result.colModel); jQuery("#UsersGrid").jqGrid( { jsonReader: { repeatitems: false,cell: "",id: "0" },mtype: 'POST',data: colD,ColNames: colN,ColModel: ColM,height: "auto",gridview: true,Pager: '#UsersGrid',rowNum: 5,rowList: [5,10,50],loadComplete: function (data) { alert('loaded completely'); },loadError: function () { alert('error'); } }); },error: function (x,e) { alert(x.readyState + ' ' + x.status + e.msg); } }); });
为动态更新了vesion
using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data; using System.Data.sqlClient; using System.Web; using System.Web.Script.Serialization; namespace jqGridInWebForm { /// <summary> /// Summary description for jqGridHandler /// </summary> public struct JQGridResults { public int page; public int total; public int records; public JQGridRow[] rows; } public struct JQGridRow { public int id; public string[] cell; } public enum GridType { GRID_TYPE_TEXT,GRID_TYPE_DATE,GRID_TYPE_INT,GRID_TYPE_DOUBLE } [Serializable] public class User { public int UserID { get; set; } public string UserName { get; set; } public string FirstName { get; set; } public string MiddleName { get; set; } public string LastName { get; set; } public string EmailID { get; set; } public string Phone { get; set; } } public class clsGridData { public List<string> _Columns = new List<string>(); public List<string[]> _Cells = new List<string[]>(); public void InitFields(string P_sql,string P_TYPE) { int _count; string connectionString = "";//P_sql using (sqlConnection connection = new sqlConnection(connectionString)) { using (sqlCommand command = new sqlCommand()) { command.Connection = connection; command.CommandText = "select * from tblusers"; command.CommandType = CommandType.Text; // StoredProcedure; connection.Open(); using (sqlDataReader dataReader = command.ExecuteReader()) { string MyField; for (_count = 0; _count < dataReader.FieldCount; _count++) { MyField = dataReader.GetName(_count); _Columns.Add(MyField); } while (dataReader.Read()) { string[] MyCell = new string[dataReader.FieldCount]; for (_count = 0; _count < dataReader.FieldCount; _count++) { MyCell[_count] = Convert.ToString(dataReader[_count]); } _Cells.Add(MyCell); } } } } } } /// <summary> /// Summary description for jqgridhandler /// </summary> public class jqGridHandler: IHttpHandler { public void ProcessRequest(HttpContext context) { HttpRequest request = context.Request; HttpResponse response = context.Response; string _search = request["_search"]; string numberOfRows = request["rows"]; string pageIndex = request["page"]; string sortColumnName = request["sidx"]; string sortOrderBy = request["sord"]; //int totalRecords; //List<User> users = GetUsers(numberOfRows,out totalRecords); clsGridData i_grid_data = new clsGridData(); i_grid_data.InitFields("",""); string output = BuildJQGridResults(i_grid_data,Convert.ToInt32(pageIndex)); //string output = BuildJQGridResults(users,Convert.ToInt32(totalRecords)); response.Write (output); } private string BuildJQGridResults(clsGridData P_GRID_DATA,int pageIndex) { JQGridResults result = new JQGridResults(); List<JQGridRow> rows = new List<JQGridRow>(); int _count; foreach (String[] Cells in P_GRID_DATA._Cells) { JQGridRow row = new JQGridRow(); row.cell = new string[Cells.GetUpperBound(0)]; //row.id = user.UserID; for (_count = 0;_count< Cells.GetUpperBound(0); _count++) { row.cell[_count] = Cells[_count].ToString(); } rows.Add(row); } result.rows = rows.ToArray(); result.page = pageIndex; result.total = (P_GRID_DATA._Cells.Count + numberOfRows - 1) / numberOfRows; result.records = P_GRID_DATA._Cells.Count; return new JavaScriptSerializer().Serialize(result); } //private string BuildJQGridResults(List<User> users,int totalRecords) { // JQGridResults result = new JQGridResults (); // List<JQGridRow> rows = new List<JQGridRow> (); // foreach (User user in users) // { // JQGridRow row = new JQGridRow (); // row.id = user.UserID; // row.cell = new string[6]; // row.cell[0] = user.UserID.ToString (); // row.cell[1] = user.UserName; // row.cell[2] = user.FirstName; // row.cell[3] = user.MiddleName; // row.cell[4] = user.LastName; // row.cell[5] = user.EmailID; // row.cell[6] = user.Phone ; // rows.Add (row); // } // result.rows = rows.ToArray (); // result.page = pageIndex; // result.total = (totalRecords + numberOfRows - 1) / numberOfRows; // result.records = totalRecords; // return new JavaScriptSerializer ().Serialize (result); //} private List<User> GetDummyUsers(string numberOfRows,out int totalRecords) { var data = new List<User> { new User(){EmailID = "test@microsoft.com",FirstName = "John",LastName = "Araya",UserID = 1,UserName = "Efrem"} }; totalRecords = data.Count; return data; } private List<User> GetUsers(string numberOfRows,out int totalRecords) { List<User> users = new List<User> (); string connectionString = ""; using (sqlConnection connection = new sqlConnection (connectionString)) { using (sqlCommand command = new sqlCommand ()) { command.Connection = connection; command.CommandText = "select * from tblusers"; command.CommandType = CommandType.Text; // StoredProcedure; //sqlParameter paramPageIndex = new sqlParameter ("@PageIndex",sqlDbType.Int); //paramPageIndex.Value = Convert.ToInt32 (pageIndex); //command.Parameters.Add (paramPageIndex); //sqlParameter paramColumnName = new sqlParameter ("@SortColumnName",50); //paramColumnName.Value = sortColumnName; //command.Parameters.Add (paramColumnName); //sqlParameter paramSortorderBy = new sqlParameter ("@SortOrderBy",4); //paramSortorderBy.Value = sortOrderBy; //command.Parameters.Add (paramSortorderBy); //sqlParameter paramNumberOfRows = new sqlParameter ("@NumberOfRows",sqlDbType.Int); //paramNumberOfRows.Value = Convert.ToInt32 (numberOfRows); //command.Parameters.Add (paramNumberOfRows); //sqlParameter paramTotalRecords = new sqlParameter ("@TotalRecords",sqlDbType.Int); //totalRecords = 0; //paramTotalRecords.Value = totalRecords; //paramTotalRecords.Direction = ParameterDirection.Output; //command.Parameters.Add (paramTotalRecords); connection.Open (); using (sqlDataReader dataReader = command.ExecuteReader ()) { User user; while (dataReader.Read ()) { user = new User (); user.UserID = (int)dataReader["UserID"]; user.UserName = Convert.ToString (dataReader["UserName"]); user.FirstName = Convert.ToString (dataReader["FirstName"]); user.MiddleName = Convert.ToString (dataReader["MiddleName"]); user.LastName = Convert.ToString (dataReader["LastName"]); user.EmailID = Convert.ToString (dataReader["EmailID"]); users.Add (user); } } //totalRecords = (int)paramTotalRecords.Value; } totalRecords = 0; return users; } } public bool IsReusable { // To enable pooling,return true here. // This keeps the handler in memory. get { return false; } } } }
解决方法
我修改了源代码,现在记录显示非常顺利,但唯一的问题是搜索不起作用,请你看看吗?我的代码如下:
aspx页面:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="JQGrid.aspx.cs" Inherits="JQGrid" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title></title> <%--<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.8/themes/ui-darkness/jquery-ui.css" type="text/css" media="all" />--%> <link rel="stylesheet" type="text/css" media="screen" href="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.9.2/themes/redmond/jquery-ui.css" /> <link href="jqScripts/css/ui.jqgrid.css" rel="stylesheet" type="text/css" /> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script> <script src="jqScripts/js/i18n/grid.locale-en.js" type="text/javascript"></script> <script src="jqScripts/js/jquery.jqGrid.min.js" type="text/javascript"></script> <script type="text/javascript"> $(function () { $("#UsersGrid").jqGrid({ url: 'jqGridHandler.ashx',colNames: ['CustomerID','CompanyName','ContactName','ContactTitle','Address','City','PostalCode','Country'],colModel: [ { name: 'CustomerID',index: 'CustomerID',width: 75,{ name: 'CompanyName',{ name: 'ContactName',{ name: 'ContactTitle',{ name: 'Address',{ name: 'City',{ name: 'PostalCode',{ name: 'Country',sortname: 'CustomerID',caption: 'My Data' }); $("#UsersGrid").jqGrid('navGrid',del: false }); }); </script> </head> <body> <form id="HtmlForm" runat="server"> <table id="UsersGrid" cellpadding="0" cellspacing="0"> <div id="UsersGridPager"> </div> </table> </form> </body> </html>
和ashx:
<%@ WebHandler Language="C#" Class="jqGridHandler" %> using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data; using System.Data.sqlClient; using System.Web; using System.Web.Script.Serialization; public class jqGridHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { HttpRequest request = context.Request; HttpResponse response = context.Response; string _search = request["_search"]; string numberOfRows = request["rows"]; //string numberOfRows = "10"; string pageIndex= request["page"]; string sortColumnName= request["sidx"]; string sortOrderBy = request["sord"]; int totalRecords; //public DataTable GetDataTable(string sidx,string sord,int page,int pageSize) Collection<User> users = GetUsers(numberOfRows,out totalRecords,_search); string output = BuildJQGridResults(users,Convert.ToInt32(totalRecords)); response.Write(output); } private string BuildJQGridResults(Collection<User> users,int totalRecords) { JQGridResults result = new JQGridResults(); List<JQGridRow> rows = new List<JQGridRow>(); foreach (User user in users) { JQGridRow row = new JQGridRow(); row.id = user.CustomerID; row.cell = new string[8]; row.cell[0] = user.CustomerID; row.cell[1] = user.CompanyName; row.cell[2] = user.ContactName; row.cell[3] = user.ContactTitle; row.cell[4] = user.Address; row.cell[5] = user.City; row.cell[6] = user.PostalCode; row.cell[7] = user.Country; rows.Add(row); } result.rows = rows.ToArray(); result.page = pageIndex; result.total = totalRecords / numberOfRows; result.records = totalRecords; return new JavaScriptSerializer().Serialize(result); } private Collection<User> GetUsers(string numberOfRows,out int totalRecords,string _search) { Collection<User> users = new Collection<User>(); string connectionString = "Data Source=ritetechno\\sqlexpress;Initial Catalog=Northwind;Integrated Security=True"; //<add name="constr" connectionString="Data Source=Abdul-THINK;Initial Catalog=Northwind;Integrated Security=True" providerName="System.Data.sqlClient"/> using (sqlConnection connection = new sqlConnection(connectionString)) { using (sqlCommand command = new sqlCommand()) { int numRows=Convert.ToInt32(numberOfRows)*(Convert.ToInt32(pageIndex)); int excluderows=Convert.ToInt32(numberOfRows)*((Convert.ToInt32(pageIndex)-1)); command.Connection = connection; command.CommandText = "SELECT TOP " + numRows + " CustomerID,CompanyName,ContactName,ContactTitle,Address,City,PostalCode,Country FROM Customers WHERE CustomerID NOT IN (SELECT TOP " + excluderows +" CustomerID FROM Customers)"; command.CommandType = CommandType.Text; connection.Open(); using (sqlDataReader dataReader = command.ExecuteReader()) { User user; while (dataReader.Read()) { user = new User(); user.CustomerID = Convert.ToString(dataReader["CustomerID"]); user.CompanyName = Convert.ToString(dataReader["CompanyName"]); user.ContactName = Convert.ToString(dataReader["ContactName"]); user.ContactTitle = Convert.ToString(dataReader["ContactTitle"]); user.Address = Convert.ToString(dataReader["Address"]); user.City = Convert.ToString(dataReader["City"]); user.PostalCode = Convert.ToString(dataReader["PostalCode"]); user.Country = Convert.ToString(dataReader["Country"]); users.Add(user); } } string cmdTotRec = "SELECT COUNT(*) FROM Customers"; sqlCommand chkTotRec = new sqlCommand(cmdTotRec,connection); totalRecords = Convert.ToInt32(chkTotRec.ExecuteScalar().ToString()); connection.Close(); } return users; } } public bool IsReusable { // To enable pooling,return true here. // This keeps the handler in memory. get { return false; } } public struct JQGridResults { public int page; public int total; public int records; public JQGridRow[] rows; } public struct JQGridRow { public string id; public string[] cell; } [Serializable] public class User { public string CustomerID { get; set; } public string CompanyName { get; set; } public string ContactName { get; set; } public string ContactTitle { get; set; } public string Address { get; set; } public string City { get; set; } public string PostalCode { get; set; } public string Country { get; set; } } }