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();

        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值