Easyui datagrid+ashx 实现动态生成列

easyui datagrid查询时需要动态生成列,网上收集了一些资料,最终实现和大家分享一下:

JS脚本:

var grid; 
  
 $(function(){ 
  
     grid = $('#tt').datagrid({ 
         fit: true,//自动大小    
         rownumbers:true,//行号   
         //loadMsg:'数据装载中......',    
         singleSelect:true,//单行选取  
         pagination:false,//显示分页  
         columns:[[]], 
         toolbar:[{ 
             text:'显示1', 
             iconCls:'icon-add', 
             handler:newData 
         },'-',{ 
             text:'显示2', 
             iconCls:'icon-add', 
             handler:newData2 
         }] 
     }); 
  
     self.parent.$("#tabs").tabs("loaded"); 
 }); 
  
 function newData(){ 
  
     $.post('ashx/freeBedHandler.ashx', { id:1 },  
         function(data) { 
             grid.datagrid({ 
                 columns:[data.columns] 
             }).datagrid("loadData", data);                
         }, 'json'); 
 } 
  
 function newData2(){ 
  
     $.post('ashx/freeBedHandler.ashx', { id:2},  
         function(data) { 
             grid.datagrid({ 
                 columns:[data.columns] 
             }).datagrid("loadData", data);                
         }, 'json'); 
 } 

var grid;

$(function(){

 grid = $('#tt').datagrid({
   fit: true,//自动大小 
         rownumbers:true,//行号
  //loadMsg:'数据装载中......', 
   singleSelect:true,//单行选取
  pagination:false,//显示分页
  columns:[[]],
   toolbar:[{
    text:'显示1',
    iconCls:'icon-add',
    handler:newData
   },'-',{
    text:'显示2',
    iconCls:'icon-add',
    handler:newData2
   }]
  });

 self.parent.$("#tabs").tabs("loaded");
 });

function newData(){

 $.post('ashx/freeBedHandler.ashx', { id:1 },
      function(data) {
          grid.datagrid({
                 columns:[data.columns]
             }).datagrid("loadData", data);              
         }, 'json');
 }

function newData2(){

 $.post('ashx/freeBedHandler.ashx', { id:2},
      function(data) {
          grid.datagrid({
                 columns:[data.columns]
             }).datagrid("loadData", data);              
         }, 'json');
 }
View Code

ahsx代码:

<%@ WebHandler Language="C#" Class="freeBedHandler" %> 
  
 using System; 
 using System.Web; 
 using System.Text; 
 using System.Data; 
 using System.Web.UI.WebControls; 
 using System.Web.SessionState; 
 using Newtonsoft.Json; 
 using Newtonsoft.Json.Converters; 
 using System.Collections; 
  
 public class freeBedHandler : IHttpHandler { 
      
     public void ProcessRequest (HttpContext context) {//示例用,各位可以根据自己需求写  
  
         var id = context.Request["id"]; 
         if (id.ToString().Equals("1")) 
         { 
             DataTable dt = createTable(); 
  
             DataRow dr = dt.NewRow(); 
             dr["field"] = "building_id"; 
             dr["title"] = "公寓编号"; 
             dr["align"] = "center"; 
             dr["width"] = 100; 
             dt.Rows.Add(dr); 
  
             dr = dt.NewRow(); 
             dr["field"] = "building_name"; 
             dr["title"] = "公寓名称"; 
             dr["align"] = "center"; 
             dr["width"] = 100; 
             dt.Rows.Add(dr); 
  
             dr = dt.NewRow(); 
             dr["field"] = "building_info"; 
             dr["title"] = "公寓信息"; 
             dr["align"] = "center"; 
             dr["width"] = 100; 
             dt.Rows.Add(dr); 
  
             dr = dt.NewRow(); 
             dr["field"] = "school_area"; 
             dr["title"] = "所在校区"; 
             dr["align"] = "center"; 
             dr["width"] = 100; 
             dt.Rows.Add(dr); 
  
             string sql = "select building_id,building_name,building_info,school_area from building"; 
             string countsql = "select count(*) from building"; 
             int count = DBHelper.GetScalar(countsql); 
             DataTable dtt = DBHelper.GetDataSet(sql); 
  
             Hashtable ht = new Hashtable(); 
             ht.Add("total", count); 
             ht.Add("columns", dt); 
             ht.Add("rows", dtt); 
             string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(ht); 
  
  
             context.Response.Clear(); 
             context.Response.ContentEncoding = Encoding.UTF8; 
             context.Response.ContentType = "application/json"; 
             context.Response.Write(strJson); 
             context.Response.Flush(); 
             context.Response.End(); 
         } 
         else 
         { 
             DataTable dt = createTable(); 
  
             DataRow dr = dt.NewRow(); 
             dr["field"] = "building_id"; 
             dr["title"] = "公寓编号"; 
             dr["align"] = "center"; 
             dr["width"] = 100; 
             dt.Rows.Add(dr); 
  
             dr = dt.NewRow(); 
             dr["field"] = "building_name"; 
             dr["title"] = "公寓名称"; 
             dr["align"] = "center"; 
             dr["width"] = 100; 
             dt.Rows.Add(dr); 
  
             dr = dt.NewRow(); 
             dr["field"] = "school_area"; 
             dr["title"] = "所在校区"; 
             dr["align"] = "center"; 
             dr["width"] = 100; 
             dt.Rows.Add(dr); 
  
             string sql = "select building_id,building_name,school_area from building"; 
             string countsql = "select count(*) from building"; 
             int count = DBHelper.GetScalar(countsql); 
             DataTable dtt = DBHelper.GetDataSet(sql); 
          
  
             Hashtable ht = new Hashtable(); 
             ht.Add("total", count); 
             ht.Add("columns", dt); 
             ht.Add("rows", dtt); 
             string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(ht); 
  
  
             context.Response.Clear(); 
             context.Response.ContentEncoding = Encoding.UTF8; 
             context.Response.ContentType = "application/json"; 
             context.Response.Write(strJson); 
             context.Response.Flush(); 
             context.Response.End(); 
         } 
          
     } 
  
     public DataTable createTable() 
     { 
  
         DataTable dt = new DataTable("myTable"); 
  
         //field列  
         DataColumn columnField = new DataColumn();//创建一列  
         columnField.DataType = System.Type.GetType("System.String");//数据类型  
         columnField.ColumnName = "field";//列名  
         dt.Columns.Add(columnField);//添加到table  
         //title列  
         DataColumn columnTitle = new DataColumn(); 
         columnTitle.DataType = System.Type.GetType("System.String"); 
         columnTitle.ColumnName = "title"; 
         dt.Columns.Add(columnTitle); 
         //align列  
         DataColumn columnAlign = new DataColumn(); 
         columnAlign.DataType = System.Type.GetType("System.String"); 
         columnAlign.ColumnName = "align"; 
         dt.Columns.Add(columnAlign); 
         //width列  
         DataColumn columnWidth = new DataColumn(); 
         columnWidth.DataType = System.Type.GetType("System.Int32"); 
         columnWidth.ColumnName = "width"; 
         dt.Columns.Add(columnWidth); 
  
         return dt; 
     } 
      
     public bool IsReusable { 
         get { 
             return false; 
         } 
     } 
  
 }
View Code
<%@ WebHandler Language="C#" Class="freeBedHandler" %>

using System;
 using System.Web;
 using System.Text;
 using System.Data;
 using System.Web.UI.WebControls;
 using System.Web.SessionState;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Converters;
 using System.Collections;

public class freeBedHandler : IHttpHandler {
    
     public void ProcessRequest (HttpContext context) {//示例用,各位可以根据自己需求写

        var id = context.Request["id"];
         if (id.ToString().Equals("1"))
         {
             DataTable dt = createTable();

            DataRow dr = dt.NewRow();
             dr["field"] = "building_id";
             dr["title"] = "公寓编号";
             dr["align"] = "center";
             dr["width"] = 100;
             dt.Rows.Add(dr);

            dr = dt.NewRow();
             dr["field"] = "building_name";
             dr["title"] = "公寓名称";
             dr["align"] = "center";
             dr["width"] = 100;
             dt.Rows.Add(dr);

            dr = dt.NewRow();
             dr["field"] = "building_info";
             dr["title"] = "公寓信息";
             dr["align"] = "center";
             dr["width"] = 100;
             dt.Rows.Add(dr);

            dr = dt.NewRow();
             dr["field"] = "school_area";
             dr["title"] = "所在校区";
             dr["align"] = "center";
             dr["width"] = 100;
             dt.Rows.Add(dr);

            string sql = "select building_id,building_name,building_info,school_area from building";
             string countsql = "select count(*) from building";
             int count = DBHelper.GetScalar(countsql);
             DataTable dtt = DBHelper.GetDataSet(sql);

            Hashtable ht = new Hashtable();
             ht.Add("total", count);
             ht.Add("columns", dt);
             ht.Add("rows", dtt);
             string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(ht);


             context.Response.Clear();
             context.Response.ContentEncoding = Encoding.UTF8;
             context.Response.ContentType = "application/json";
             context.Response.Write(strJson);
             context.Response.Flush();
             context.Response.End();
         }
         else
         {
             DataTable dt = createTable();

            DataRow dr = dt.NewRow();
             dr["field"] = "building_id";
             dr["title"] = "公寓编号";
             dr["align"] = "center";
             dr["width"] = 100;
             dt.Rows.Add(dr);

            dr = dt.NewRow();
             dr["field"] = "building_name";
             dr["title"] = "公寓名称";
             dr["align"] = "center";
             dr["width"] = 100;
             dt.Rows.Add(dr);

            dr = dt.NewRow();
             dr["field"] = "school_area";
             dr["title"] = "所在校区";
             dr["align"] = "center";
             dr["width"] = 100;
             dt.Rows.Add(dr);

            string sql = "select building_id,building_name,school_area from building";
             string countsql = "select count(*) from building";
             int count = DBHelper.GetScalar(countsql);
             DataTable dtt = DBHelper.GetDataSet(sql);
        

            Hashtable ht = new Hashtable();
             ht.Add("total", count);
             ht.Add("columns", dt);
             ht.Add("rows", dtt);
             string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(ht);


             context.Response.Clear();
             context.Response.ContentEncoding = Encoding.UTF8;
             context.Response.ContentType = "application/json";
             context.Response.Write(strJson);
             context.Response.Flush();
             context.Response.End();
         }
        
     }

    public DataTable createTable()
     {

        DataTable dt = new DataTable("myTable");

        //field列
        DataColumn columnField = new DataColumn();//创建一列
        columnField.DataType = System.Type.GetType("System.String");//数据类型
        columnField.ColumnName = "field";//列名
        dt.Columns.Add(columnField);//添加到table
         //title列
        DataColumn columnTitle = new DataColumn();
         columnTitle.DataType = System.Type.GetType("System.String");
         columnTitle.ColumnName = "title";
         dt.Columns.Add(columnTitle);
         //align列
        DataColumn columnAlign = new DataColumn();
         columnAlign.DataType = System.Type.GetType("System.String");
         columnAlign.ColumnName = "align";
         dt.Columns.Add(columnAlign);
         //width列
        DataColumn columnWidth = new DataColumn();
         columnWidth.DataType = System.Type.GetType("System.Int32");
         columnWidth.ColumnName = "width";
         dt.Columns.Add(columnWidth);

        return dt;
     }
    
     public bool IsReusable {
         get {
             return false;
         }
     }

}
View Code

Json数格式如下:

{"total":16,"rows":[{"building_id":"B1","building_name":"1号楼","building_info":"一公寓(女生)","school_area":"小营"},{"building_id":"B2","building_name":"2号楼","building_info":"二公寓(女生)","school_area":"小营"},{"building_id":"B3","building_name":"3号楼","building_info":"三公寓(女生)","school_area":"小营"},{"building_id":"B4-1","building_name":"4-1号楼","building_info":"四公寓(男生)","school_area":"小营"},{"building_id":"B4-2","building_name":"4-2号楼","building_info":"四公寓(女生)","school_area":"小营"},{"building_id":"B5","building_name":"5号楼","building_info":"五公寓(男生)","school_area":"小营"},{"building_id":"B6","building_name":"6号楼","building_info":"六公寓(女生)","school_area":"小营"},{"building_id":"B7","building_name":"七号楼","building_info":"七公寓(女生)","school_area":"小营"},{"building_id":"J1","building_name":"1号楼","building_info":"一公寓(男生) ","school_area":"健翔桥"},{"building_id":"J2-1","building_name":"二公寓","building_info":"二公寓男生","school_area":"健翔桥"},{"building_id":"J2-2","building_name":"三公寓","building_info":"二公寓女生","school_area":"健翔桥"},{"building_id":"J4","building_name":"四公寓","building_info":"四公寓男生","school_area":"健翔桥"},{"building_id":"Q1","building_name":"1号楼","building_info":"一公寓(男生) ","school_area":"清河"},{"building_id":"Q2","building_name":"2号楼","building_info":"二公寓(女生)","school_area":"清河"},{"building_id":"Q3","building_name":"3号楼","building_info":"三公寓(女生) ","school_area":"清河"},{"building_id":"Q4","building_name":"四公寓","building_info":"四公寓男生  ","school_area":"清河"}],"columns":[{"field":"building_id","title":"公寓编号","align":"center","width":100},{"field":"building_name","title":"公寓名称","align":"center","width":100},{"field":"building_info","title":"公寓信息","align":"center","width":100},{"field":"school_area","title":"所在校区","align":"center","width":100}]}

其实主要原理就是后台生成了columns:[],然后grid.datagrid({columns:[data.columns]})绑定列,就OK了。

posted @ 2013-05-19 10:18  摩根船长  阅读(7679)  评论(2编辑  收藏  举报