发现Ext中文官网论坛上一些Ext的好文章,真是相见恨晚啊,比自己看Document要快十倍,extit 简直是太伟大了。一点一点的学习,一点一点的摘抄到我的Blog,纯属收藏,急于看别的内容的朋友,请直接到论坛上去看:原文:http://www.cnblogs.com/mogen_yin/archive/2008/12/04/1347246.html

其实这篇所用到的代码在其它博客中都有完全一样的,可是有些朋友刚刚入手,你在一篇里实现了太多的功能,他们学习的复杂度就增加,所以,为了一个简单和清晰,我将以前实现过的示例剥离出来,仅仅就是一个实现绑定的功能。希望真的对你们有所帮助或者启发。
效果图如下:

显示列表页面的html代码

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="gridDynamic3.aspx.cs" Inherits="WebExt.Sample3.gridDynamic3" %>

  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  3. <html xmlns="http://www.w3.org/1999/xhtml" >
  4. <head id="Head1" runat="server">
  5.     <title>动态生成GridPanel</title>
  6.     <link rel="Stylesheet" type="text/css" href="../ExtJS/resources/css/ext-all.css" />
  7.     <link rel="Stylesheet" type="text/css" href="../ExtJS/resources/css/xtheme-green.css" />
  8.     <script type="text/javascript" src="../ExtJS/adapter/ext/ext-base.js"></script>
  9.     <script type="text/javascript" src="../ExtJS/ext-all.js"></script>
  10.     <script type="text/javascript" src="../ExtJS/ext-lang-zh_CN.js"></script>
  11. </head>
  12. <body>
  13.     <form id="form1" runat="server">
  14.     <div>
  15.     <div id="grid_div"></div>
  16.     <script type="text/javascript">
  17.     //这里主要实现一个从后台获取数据列,然后动态添加到ColumnModel中,再也不用手动配置的方式
  18.     function ready()
  19.     {
  20.         //声明函数变量
  21.         var data;
  22.         //动态添加列,这是关键代码
  23.         var addColumn = function()
  24.         {
  25.             this.fields = '';
  26.             this.columns = '';      
  27.             this.addColumns=function(name,caption)
  28.             {
  29.                 if(this.fields.length > 0)
  30.                 {
  31.                     this.fields += ',';
  32.                 }
  33.                 if(this.columns.length > 0)
  34.                 {               
  35.                     this.columns += ',';
  36.                 }            
  37.                 this.fields += '{name:"' + name + '"}';
  38.                 this.columns += '{header:"' + caption + '",dataIndex:"' + name + '",width:100,sortable:true}';
  39.             };
  40.         };
  41.         //从服务器端获取列,然后动态添加到ColumnModel中
  42.         Ext.Ajax.request
  43.         ({
  44.              url:"jsonGridDynamic.aspx?param=column",
  45.              success:function(response,option)
  46.              {                 
  47.                  if(response.responseText=="")
  48.                  {
  49.                     return;
  50.                  }                 
  51.                  data = new addColumn();
  52.                  var res = Ext.util.JSON.decode(response.responseText);                 
  53.                  for(var i=0;i<res.length;i++)
  54.                  {
  55.                      for(var p in res[i])
  56.                      {
  57.                         data.addColumns(p,p);
  58.                      }
  59.                  }
  60.                  //动态生成GridPanel
  61.                  makeGrid();
  62.              },
  63.              failure:function()
  64.              {
  65.                 Ext.Msg.alert("消息","查询出错---->请打开数据库查看数据表名字是否正确");
  66.              }
  67.         });
  68.         //动态生成GridPanel
  69.         var makeGrid = function()
  70.         {
  71.             var cm = new Ext.grid.ColumnModel(eval('([' + data.columns + '])'));
  72.             cm.defaultSortable = true;
  73.             var fields = eval('([' + data.fields + '])');
  74.             var newStore = new Ext.data.Store
  75.             ({
  76.                     proxy:new Ext.data.HttpProxy({url:"jsonGridDynamic.aspx?param=data"}),
  77.                     reader:new Ext.data.JsonReader({totalProperty:"totalPorperty",root:"root",fields:fields})
  78.             });
  79.             
  80.             newStore.load({params:{start:0,limit:16}});
  81.             var pagingBar = new Ext.PagingToolbar
  82.             ({
  83.                     displayInfo:true,
  84.                     emptyMsg:"没有数据显示",
  85.                     displayMsg:"显示从{0}条数据到{1}条数据,共{2}条数据",
  86.                     store:newStore,
  87.                     pageSize:16
  88.             });        
  89.             var gridPanel = new Ext.grid.GridPanel
  90.             ({
  91.                     title:"动态生成grid",
  92.                     cm:cm,
  93.                     id:"grid_panel",renderTo:"grid_div",
  94.                     store:newStore,
  95.                     frame:true,
  96.                     border:true,                    
  97.                     layout:"fit",   
  98.                     pageSize:16,  
  99.                     width:500,
  100.                     height:400,
  101.                     viewConfig:{forceFit:true},
  102.                     bbar:pagingBar
  103.             });
  104.         };
  105.     }
  106.     Ext.onReady(ready);
  107.     </script>
  108.     </div>
  109.     </form>
  110. </body>
  111. </html>
复制代码
jsonGridDynamic.aspx页面的html代码 再强调下 就一行 多余的务必删除 经常有人问我 前台获取数据总是提示少一个括弧,就是因为处理Ext请求的页面没有将多余的html代码删除掉
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="jsonGridDynamic.aspx.cs" Inherits="WebExt.Sample3.jsonGridDynamic" %>
复制代码
jsonGridDynamic.aspx.cs页面的后台代码
  1. public partial class jsonGridDynamic : System.Web.UI.Page
  2. {
  3.     protected void Page_Load(object sender, EventArgs e)
  4.     {
  5.         #region 分页
  6.         int pagesize = 20;
  7.         int start = 1;
  8.         string field, asc_desc;
  9.         if (string.IsNullOrEmpty(Request["sort"]))
  10.         {
  11.             field = "ID";
  12.             asc_desc = "desc";
  13.         }
  14.         else
  15.         {
  16.             field = Request["sort"];
  17.             asc_desc = Request["dir"];
  18.         }
  19.         if (!string.IsNullOrEmpty(Request["limit"]))
  20.         {
  21.             pagesize = int.Parse(Request["limit"]);
  22.             start = int.Parse(Request["start"]);
  23.         }
  24.         start = start / pagesize;
  25.         start += 1;
  26.         #endregion
  27.         string param = Request["Param"];
  28.         switch (param)
  29.         {
  30.             case "data":
  31.                 Response.Write(Select(field, asc_desc, pagesize, start));
  32.                 break;
  33.             case "column":
  34.                 Response.Write(GetDataColumn());
  35.                 break;
  36.             default:
  37.                 break;
  38.         }
  39.     }

  40.     //获取数据
  41.     string Select(string field, string asc_desc, int pagesize, int start)
  42.     {
  43.         string json = "";
  44.         try
  45.         {
  46.             DataSet ds = ExtUtil.PaginationByTableName(field, asc_desc, pagesize, start, "TypeTable");//获取集合
  47.             if (ds != null && ds.Tables[0].Rows.Count > 0)
  48.             {
  49.                 json = ExtUtil.GetJsonString(ds);//获取Json字符串
  50.                 int count = ExtUtil.GetCountByTableName("TypeTable");//获取行数
  51.                 json = "{totalPorperty:" + count + ",root:" + json + "}";
  52.             }
  53.         }
  54.         catch (Exception ee)
  55.         {
  56.             string error = ee.Message;
  57.         }
  58.         return json;
  59.     }

  60.     //获取数据列
  61.     string GetDataColumn()
  62.     {
  63.         DataSet ds = ExtBusiness.GetMoreRow();//获取dataset集合
  64.         //只要ds不为null,则不管该表是否有数据,都有数据列生成
  65.         if (ds != null)
  66.         {
  67.             List<Hashtable> htList = new List<Hashtable>();
  68.             foreach (DataColumn col in ds.Tables[0].Columns)
  69.             {
  70.                 Hashtable ht = new Hashtable();
  71.                 ht.Add(col.ColumnName, col.ColumnName);
  72.                 htList.Add(ht);
  73.             }
  74.             try
  75.             {
  76.                 string json = JavaScriptConvert.SerializeObject(htList);//获取Json字符串
  77.                 return json;
  78.             }
  79.             catch (Exception ee)
  80.             {
  81.                 string error = ee.Message;
  82.             }
  83.         }
  84.         return "";
  85.     }
  86. }
复制代码

 

posted on 2009-04-30 17:04  fmxyw  阅读(938)  评论(1编辑  收藏  举报