asp.net Ext grid 显示列表

  前台页面:

  

复制代码 代码如下:

  <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="gridShowTest.aspx.cs" Inherits="ExtPra.gridShowTest" %>

  <!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>显示gird</title>

  <link rel="Stylesheet" type="text/css" href="ExtJS/resources/css/ext-all.css" />

  <script type="text/javascript" src="ExtJS/adapter/ext/ext-base.js"></script>

  <script type="text/javascript" src="ExtJS/ext-all.js"></script>

  <script type="text/javascript" src="ExtJS/build/locale/ext-lang-zh_CN.js"></script>

  </head>

  <body>

  <form id="form1" runat="server">

  <div>

  <script type="text/javascript">

  function ready()

  {

  Ext.BLANK_IMAGE_URL="ExtJS/docs/resources/s.gif"; //空白图片设置为本地,否则按默认方式从官方网站下载(在联网环境下)

  var url="myGridJson.aspx?Param=select";

  var sm=new Ext.grid.CheckboxSelectionModel();//复选按钮

  var cm=new Ext.grid.ColumnModel //列模版定义(该例中定义显示数据库表Employees中的四列)

  ([

  sm,//在每行的第一列添加一个复选按钮 ,

  new Ext.grid.RowNumberer({header:"自动显示行号",width:100}),//添加自动显示行号的列

  {header:'员工编号',dataIndex:'EmployeeID',sortable:true, width:100},

  {header:'名字',dataIndex:'LastName',sortable:true,width:100,editor:new Ext.form.TextField()},

  {header:'姓氏',dataIndex:'FirstName',sortable:true,width:100,editor:new Ext.form.TextField()},

  {header:'出生日期',dataIndex:'BirthDate',sortable:true,width:100,renderer:Ext.util.Format.dateRenderer('Y年m月d日')} //,renderer:Ext.util.Format.dateRenderer('Y年m月d日')

  ]);

  // cm.defaultSortable=true; //设置所有列是可以排序的

  var fields= //字段

  [

  {name:"EmployeeID",mapping: 'EmployeeID'},

  {name:"LastName",mapping: 'LastName'},

  {name:"FirstName",mapping:'FirstName'},

  {name:"BirthDate",mapping:'BirthDate',type:'date'}

  ];

  //store 是Ext中数据存储的和数据交换的缓冲区 在grid等控件中要使用store作为填充的数据源

  var store=new Ext.data.Store //JsonReader支持分页 totalProperty获得记录的总数 ,root是从服务器返回的json串

  ({

  proxy:new Ext.data.HttpProxy({url:url}),//proxy告诉我们从哪里获取数据

  reader:new Ext.data.JsonReader //reader 告诉我们如何解析数据

  ({

  totalProperty:"totalCount",root:"root",//totalCount

  fields:fields //fields 告诉我们按照定义的规范进行解析 每行读取4个数据,第一个是EmployeeID 第二个是LastName ...

  }) //与ColumnModel中的dataIndex想对应,这样ColumnModel就知道那列应该显示那条数据了

  // remoteSort:true //支持服务器端排序 设置 store.remoteSort = true ,会向后台提交两个参数 sort ,dir,sort排序字段 dir升序或降序

  }); //此时不支持前台排序,否则只是前台排序

  store.load({params:{start:0,limit:3}}); //对数据进行初始化 start表示起始页 limit表示每页大小,最好与分页toolbar中的pageSize一致

  var pagingBar=new Ext.PagingToolbar //分页toolbar

  ({

  displayInfo:true,

  emptyMsg:"没有数据显示",

  displayMsg:"显示从{0}条数据到{1}条数据,共{2}条数据",

  store:store,

  pageSize:3 //客户端的模拟分页 可以再分页栏中看到根据该pageSize和总记录数(pageCount)计算得到的页数 pageCount/pageSize

  });

  var grid=new Ext.grid.GridPanel

  ({

  // el:"testGrid",

  id:"MenuGrid",

  title:"显示列表",

  // autoWidth:true,

  autoHeight:true,

  width:550,

  //height:300, //千万别忘了设置height,否则默认的height的值是0,显示不了读取的数据

  renderTo:document.body,

  layout:"fit",

  frame:true,

  border:true,

  // autoScroll:true,

  sm:sm, //GridPanel中的复选按钮,可以全选所有的行,若没有设置该属性,则GridPanel得全选功能不能实现

  cm:cm,

  store:store,

  // viewConfig:{forceFit: true},设置该属性为true则grid中的列宽设置无效,grid会根据这些数值计算出比例,对各列分配宽度

  bbar:pagingBar

  });

  grid.addListener('sortchange', sortchangeFn); //给grid增加一个'sortchange'事件,当发生排序改变的事件,启动服务器端排序(即remoteSort:true)

  //和重新加载数据( 即store.reload({params:{start:0,limit:3}}) )

  function sortchangeFn(grid, sortinfo)

  {

  //alert('排序'+ sortinfo.field + "方向" + sortinfo.direction);

  remoteSort:true

  store.reload({params:{start:0,limit:3}}); //每次store.reload的时候,向后台传递sort ,dir dir每点击一次就会自动做相应的改变从desc->asc,asc->desc

  }

  }

  Ext.onReady(ready);

  </script>

  <div id="testGrid">

  </div>

  </div>

  </form>

  </body>

  </html>

  后台代码:

  

复制代码 代码如下:

  using System;

  using System.Collections;

  using System.Configuration;

  using System.Data;

  using System.Linq;

  using System.Web;

  using System.Web.Security;

  using System.Web.UI;

  using System.Web.UI.HtmlControls;

  using System.Web.UI.WebControls;

  using System.Web.UI.WebControls.WebParts;

  using System.Xml.Linq;

  using System.Data.SqlClient;

  using System.Collections.Generic;

  using Newtonsoft.Json;

  namespace ExtPra

  {

  public partial class myGridJson : System.Web.UI.Page

  {

  protected void Page_Load(object sender, EventArgs e)

  {

  #region 分页

  int pagesize = 20;

  int start = 1;

  string field, asc_desc;

  if (string.IsNullOrEmpty(Request["sort"]))

  {

  field = "EmployeeID";

  asc_desc = "asc";

  }

  else

  {

  field = Request["sort"];

  asc_desc = Request["dir"];

  }

  if (!string.IsNullOrEmpty(Request["limit"]))

  {

  pagesize = int.Parse(Request["limit"]);

  start = int.Parse(Request["start"]);

  }

  start = start / pagesize;

  start += 1;

  #endregion

  string strSql = string.Format("select EmployeeID, LastName,FirstName,BirthDate from Employees where EmployeeID between ({0}-1)*{1}+1 and {0}*{1} order by {2} {3} ",start,pagesize,field,asc_desc);

  string strConnection = "Data Source=.;Initial Catalog=Northwind;User ID=sa;password=sa";

  SqlConnection con = new SqlConnection(strConnection);

  SqlDataAdapter da = new SqlDataAdapter(strSql, con);

  DataSet ds = new DataSet();

  da.Fill(ds, "Employees");

  string json = "";

  IList<Hashtable> mList = new List<Hashtable>();

  try

  {

  foreach (DataRow row in ds.Tables[0].Rows)

  {

  Hashtable ht = new Hashtable();

  foreach (DataColumn col in ds.Tables[0].Columns)

  {

  ht.Add(col.ColumnName, row[col.ColumnName]);

  }

  mList.Add(ht);

  }

  json = JavaScriptConvert.SerializeObject(mList);

  }

  catch (Exception ee)

  {

  string error = ee.Message;

  }

  // int count = ds.Tables[0].Rows.Count;

  int count = 9;

  json = "{totalCount:" + count + ",root:" + json + "}";

  Response.Write(json);

  Response.End();

  }

  }

  }