`
mogen9999
  • 浏览: 13225 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Ext2.2动态生成ColumnModel

    博客分类:
  • Ext
阅读更多

本篇主要介绍动态生成ColumnModel,进而生成动态生成GridPanel

前台的js部分:

<form id="form1" runat="server">
    <div>
    <div id="grid_div"></div>
    <script type="text/javascript">
    //这里主要实现一个从后台获取数据列,然后动态添加到ColumnModel中,再也不用手动配置的方式
    function ready()
    {
        //声明函数变量
        var data;
        //动态添加列,这是关键代码
        var addColumn = function()
        {
            this.fields = '';
            this.columns = '';      
            this.addColumns=function(name,caption)
            {
                if(this.fields.length > 0)
                {
                    this.fields += ',';
                }
                if(this.columns.length > 0)
                {               
                    this.columns += ',';
                }           
                this.fields += '{name:"' + name + '"}';
                this.columns += '{header:"' + caption + '",dataIndex:"' + name + '",width:100,sortable:true}';
            };
        };
        //从服务器端获取列,然后动态添加到ColumnModel中
        Ext.Ajax.request
        ({
             url:"JsonData.aspx?param=column",
             success:function(response,option)
             {                
                 if(response.responseText=="")
                 {
                    return;
                 }                
                 data = new addColumn();
                 var res = Ext.util.JSON.decode(response.responseText);                
                 for(var i=0;i<res.length;i++)
                 {
                     for(var p in res[i])
                     {
                        data.addColumns(p,p);
                     }
                 }
                 //动态生成GridPanel
                 makeGrid();
             },
             failure:function()
             {
                Ext.Msg.alert("消息","初始化数据出错");
             }
        });
        //动态生成GridPanel
        var makeGrid = function()
        {
            var cm = new Ext.grid.ColumnModel(eval('([' + data.columns + '])'));
            cm.defaultSortable = true;
            var fields = eval('([' + data.fields + '])');
            var newStore = new Ext.data.Store
            ({
                    proxy:new Ext.data.HttpProxy({url:"JsonData.aspx?param=data"}),
                    reader:new Ext.data.JsonReader({totalProperty:"totalPorperty",root:"result",fields:fields})
            });
           
            newStore.load({params:{start:0,limit:9}});
            var pagingBar = new Ext.PagingToolbar
            ({
                    displayInfo:true,
                    emptyMsg:"没有数据显示",
                    displayMsg:"显示从{0}条数据到{1}条数据,共{2}条数据",
                    store:newStore,
                    pageSize:9
            });       
            var gridPanel = new Ext.grid.GridPanel
            ({
                    title:"动态生成ColumnModel",
                    cm:cm,
                    id:"grid_panel",renderTo:"grid_div",
                    store:newStore,
                    frame:true,
                    border:true,                   
                    layout:"fit",  
                    pageSize:16,   
                    autoWidth:true,
                    height:300,
                    width:600,
                    viewConfig:{forceFit:true},
                    bbar:pagingBar
            });
        };
    }
    Ext.onReady(ready);
    </script>
    </div>
    </form>

后台的cs部分:

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 = "ID";
                asc_desc = "desc";
            }
            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 param = Request["Param"];
            switch (param)
            {
                case "data":
                    Response.Write(Select(field, asc_desc, pagesize, start));
                    break;
                case "column":
                    Response.Write(GetDataColumn());
                    break;
                case "data_column":
                    Response.Write(GetDataAndColumn(field, asc_desc, pagesize, start));
                    break;
                default:
                    break;
            }
        }

        string GetDataAndColumn(string field, string asc_desc, int pagesize, int start)
        {
            string data = Select(field, asc_desc, pagesize, start);
            string column = GetDataColumn();

            List<Hashtable> htList = new List<Hashtable>();
            Hashtable ht = new Hashtable();
            ht.Add("data", data);
            ht.Add("column", column);
            htList.Add(ht);
            string json = JavaScriptConvert.SerializeObject(htList);
            return json;

        }

        string Select(string field, string asc_desc, int pagesize, int start)
        {
            string json = "";
            try
            {
                DataSet ds = CommonUtil.PaginationByTableName(field, asc_desc, pagesize, start, "TypeTable");
                if (ds != null && ds.Tables[0].Rows.Count > 0)
                {
                    json = CommonUtil.GetJsonString(ds);
                    int count = CommonUtil.GetCountByTableName("TypeTable");
                    json = "{totalPorperty:" + count + ",root:" + json + "}";
                }
            }
            catch (Exception ee)
            {
                string error = ee.Message;
            }
            return json;
        }

这里留个大家一个思考:

细心的读者可能够已经注意到了,

这个程序向服务器请求了2次,

第一次是获取数据列,

第二次是获取分页的数据,

那么如何做到只向服务器请求一次就能够实现这个功能呢?

期待大家的讨论.

 

欢迎访问Ext技术博客

2
0
分享到:
评论
1 楼 xiaohewoai 2010-03-30  
直接一个 json 格式全部传过来啊

相关推荐

    Ext.grid.ColumnModel显示不正常

    Ext.grid.ColumnModel显示不正常

    Ext grid 动态添加字段、列扩展

    Ext grid 动态添加字段、列扩展, 如何动态添加或者删除一个grid的列

    extjs动态生成表格,前台+后台

    6. 动态生成:通过JavaScript代码动态创建ColumnModel和Store,从而实现表格的动态生成。 通过理解和掌握这些知识点,开发者可以构建出高度灵活、响应式的前端表格应用,同时充分利用后端数据源提供动态内容。

    Ext2.2-用XML做数据源,可编辑Grid的例子.rar

    本示例“Ext2.2-用XML做数据源,可编辑Grid的例子.rar”聚焦于如何利用Ext JS的Grid组件,并结合XML数据源来实现一个可编辑的数据网格。 在Web应用中,数据展示和编辑是常见的需求。Grid组件是Ext JS处理表格数据的...

    ext grid 动态扩展

    本篇将详细介绍如何实现 `Ext Grid` 的列动态添加。 1. **创建 ColumnModel** `Ext.grid.ColumnModel` 是用于定义 `GridPanel` 列结构的类。在创建 `ColumnModel` 时,我们需要提供一个包含列信息的 JavaScript ...

    ext.net 动态创建gridpanel

    在Ext.NET中,动态创建GridPanel意味着在运行时根据需要生成组件。这通常涉及到在服务器端代码(如C#或VB.NET)中创建GridPanel对象,设置其属性,然后将它添加到对应的容器中。`newtpanel.aspx.cs` 文件很可能是...

    ext实现动态树

    var cm = new Ext.grid.ColumnModel([ Ext.grid.RowNumberer, { header: "ID", dataIndex: "id" }, { header: "文件名称", dataIndex: "filename" }, { header: "路径", dataIndex: "url" }, { header: "父ID",...

    grid动态生成列参考!

    `ColumnModel`接受一个包含列配置的JavaScript数组作为参数,这为动态生成列提供了可能。当需要根据特定条件或数据来源动态调整列结构时,掌握这一技能就显得尤为重要。 #### 二、动态生成列策略 假设我们的应用...

    ExtJs GridPanel双击事件获得双击的行

    GridPanel由Store(数据存储)和ColumnModel(列模型)组成,它们定义了数据源和显示样式。在创建GridPanel时,我们需要配置这两个部分,例如: ```javascript var store = Ext.create('Ext.data.Store', { fields...

    EXT核心API详解pdf

    ### EXT核心API详解:Ext.grid.ColumnModel与Grid定制 #### 概述 在现代Web开发中,特别是使用ExtJS框架进行复杂用户界面构建时,`Ext.grid.ColumnModel`是实现功能丰富的表格展示不可或缺的一部分。本文将详细介绍...

    Ext 中实现Excel导出

    根据给定的信息,本文将详细解释如何在Ext框架中实现Excel导出功能。这涉及到从前台界面设计到...通过动态生成GridPanel以及合理地处理数据格式转换、性能优化等问题,可以有效地提升用户体验。希望本文对您有所帮助!

    Ext2.0示例讲解

    var cm = new Ext.grid.ColumnModel([ {header:'编号',dataIndex:'id'}, {header:'性别',dataIndex:'sex'}, {header:'名称',dataIndex:'name'}, {header:'描述',dataIndex:'descn'} ]); cm.defaultSortable = ...

    ext 代码生成器

    `ext 代码生成器`是一个工具,用于自动化生成EXTJS框架中的代码,特别是与数据展示、编辑和删除相关的部分。在给定的描述中提到,XCodeBuilder是一个这样的工具,它不仅能够生成.NET三层架构的代码,还能生成处理层...

    ext js学习文档

    1. **定义列模型**:通过 `Ext.grid.ColumnModel` 创建 Grid 的列信息,指定每列的标题和数据索引。 ```javascript var cm = new Ext.grid.ColumnModel([ {header: '编号', dataIndex: 'id'}, {header: '名称',...

    ExtJs表格点击超链接获取行的值

    在ExtJs框架中,我们经常需要在表格(`Ext.grid.Panel`)中显示超链接,并且当用户点击这些超链接时,能够获取到当前行的数据。为了实现这一功能,我们可以使用`renderer`函数对单元格进行自定义渲染。 **代码示例*...

    EXTGrid属性方法

    - **reconfigure(Ext.data.Store store, Ext.grid.ColumnModel colModel)**: 重新配置数据存储器和列配置模型,通常用于动态改变表格的数据或列结构。 #### 三、Ext.grid.Column `Ext.grid.Column`代表了表格中的...

    ext学习资料ext学习资料

    var cm = new Ext.grid.ColumnModel([{header: '编 号', dataIndex: 'userId'}, ...]); var store = new Ext.data.Store({proxy: new Ext.data.MemoryProxy(data), ...}); var grid = new Ext.grid.GridPanel({...

Global site tag (gtag.js) - Google Analytics