根据实时数据在同一个DataGrid中显示不同字段,本身easyui并没有支持动态绑定列名,只有show属性显示或隐藏某字段。今天在网上看到直接修改easyui类库动态绑定列名的方法,废话不多说直接借用源码备份以后用。先说一下思路:首先UI的datagrid中没有指定任何列,ajax提交成功后同时返回列的信息,先进行列的动态绑定,然后显示数据内容。

1.UI

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

<!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>动态datagrid</title>     

    <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>     

    <script src="Scripts/jquery.easyui.min.js" type="text/javascript"></script>     

    <link href="Style/themes/default/easyui.css" rel="stylesheet" type="text/css" />     

    <script type="text/javascript">     

        $(function () {      

            $('#tbUsers').datagrid({      

                title: 'My Title',      

                width: 600,      

                height: 350,      

                dataType: 'json',      

                url: 'GetAjaxData.ashx?action=GetUserList2',      

                columns: [[]],      

                pagination: true,      

                pageSize: 5,                //每页记录数      

                pageList: [5, 10, 15, 20, 30, 50], //分页记录数数组      

                onLoadSuccess: function (data, param) {      

                          

                }      

            });      

        });      

    </script>     

</head>     

<body>     

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

    <div>     

        <table id="tbUsers">     

        </table>     

    </div>     

    </form>     

</body>     

</html>

2.easyUI类库的修改(位置在datagrid ajax提交位置L6220处)

 function _43f() {      
    $.ajax({ type: opts.method, url: opts.url, data: _43d, dataType: "json", success: function (data) {               //动态添加列               if (!!data && !!data.columns) {                   var opts=$.data(_43a, "datagrid").options;                   var _369 = $.data(_43a, "datagrid").panel;                   var cols = $.data(_43a, "datagrid").options.columns[0];                   var colCount=cols.length;                   if(colCount==0){                       //cols.slice(0,cols.length);//清除数组内容                       for (var i = 0; i < data.columns.length; i++) {                           var col = {                               field: data.columns[i].field,                               title: data.columns[i].title,                               width: data.columns[i].width,                               align: data.columns[i].align                           };                           cols.push(col);                       }                       //UI添加列                       if (colCount==0 && opts.columns) {                           var t = _370(opts.columns);                           $("div.datagrid-view2 div.datagrid-header-inner", _369).html(t);                       }                   }               }               setTimeout(function () {                   _440();               }, 0);               if(!!data && !!data.rows){                   _3a2(_43a, data);               }               setTimeout(function () {                   _42d(_43a);               }, 0);           }, error: function () {               setTimeout(function () {                   _440();               }, 0);               if (opts.onLoadError) {                   opts.onLoadError.apply(_43a, arguments);               }           }            });       };

3.后台提供数据(一般处理程序)

 public void GetUserList(HttpContext context) {      

            String strJson = @"{      

                'total':20,      

                'rows':[      

                    {'name':'zhangsan01','age':'21','hobby':'001'},      

                    {'name':'zhangsan02','age':'21','hobby':'001'},      

                    {'name':'zhangsan03','age':'21','hobby':'001'},      

                    {'name':'zhangsan04','age':'21','hobby':'001'},      

                    {'name':'zhangsan05','age':'21','hobby':'001'}      

                ],      

                'columns':[      

                    {'field':'name','title':'Name','width':100,'align':'center'}, 

                    {'field':'age','title':'Age','width':100,'align':'center'},   

                    {'field':'hobby','title':'Hobby','width':100,'align':'center'} 

                ]      

            }";      

            strJson = strJson.Replace("'", "/"");      

            HttpResponse response = context.Response;      

            response.ContentType = "text/json";      

            response.Write(strJson);      

}

这样就完成了动态绑定列名。功能是可以了,还不利于大量生产,需要提供自动集合转Json的类。

为此,我设计了一个JDataGrid类用于将List的集合生成我的DataGrid需要的数据格式(包含列的信息)。

1.定义User类,就作为实体类

 public void GetUserList(HttpContext context) {      

    public class User {      

        public string Name { get; set; }      

        public int Age { get; set; }      

        public string Gender { get; set; }      

        public string Hobby { get; set; }      

    }      

}

2.定义JDataGrid类和JColumn类

 public class JDataGrid {      

     

    public int total { get; set; }      

    public List<Dictionary<string, object>> rows { get; set; }      

    public List<JColumn> columns { get; set; }      

     

    public static List<Dictionary<string, object>> ConvertRows(IList list) {      

        List<Dictionary<string, object>> rowsList=new List<Dictionary<string, object>>();      

        if (list != null) {      

            foreach (object obj in list) {      

                Dictionary<string, object> dic = new Dictionary<string, object>();      

                Type t = obj.GetType();      

                foreach (PropertyInfo pi in t.GetProperties()) {      

                    string key = pi.Name;      

                    object value=pi.GetValue(obj, null);      

                    dic.Add(key, value);      

                }      

                rowsList.Add(dic);      

            }      

        }      

        return rowsList;      

    }      

     

    public string ConvertToJson() {      

        StringBuilder sb = new StringBuilder();      

        sb.AppendFormat("{{/"total/":{0},/"rows/":[", total);      

        //添加数据      

        if (rows != null && rows.Count > ) {      

            for (int i = ; i < rows.Count; i++) {      

                sb.Append("{");      

                foreach (string key in rows[i].Keys) {      

                    if (rows[i][key] is ValueType) {      

                        sb.AppendFormat("/"{}/":{1},", key, rows[i][key]);      

                    } else {      

                        sb.AppendFormat("/"{}/":/"{}/",", key, rows[i][key]);      

                    }      

                }      

                sb.Remove(sb.Length - , );      

                sb.Append("}");      

                if (i != rows.Count - ) {      

                    sb.Append(",");      

                }      

            }      

        }      

        sb.Append("],");      

        sb.Append("/"columns/":[");      

        //添加列      

        if (columns != null && columns.Count > ) {      

            for (int i = ; i < columns.Count; i++) {      

                sb.Append(columns[i].ConvertToJson());      

                if (i != columns.Count - ) {      

                    sb.Append(",");      

                }      

            }      

        }      

        sb.Append("]}");      

        string str=sb.ToString();      

        return str;      

    }      

}      

     

public class JColumn {      

    public int rowspan { get; set; }      

    public int colspan { get; set; }      

    public bool checkbox { get; set; }      

    public string field { get; set; }      

    public string title { get; set; }      

    public int width { get; set; }      

    public string align { get; set; }      

     

    public string ConvertToJson() {      

        StringBuilder sb = new StringBuilder();      

        sb.Append("{");      

        if (rowspan != null) {      

            sb.AppendFormat("/"rowspan/":{0},", rowspan);      

        }      

        if (colspan != null) {      

            sb.AppendFormat("/"colspan/":{0},", colspan);      

        }      

        if (checkbox != null) {      

            sb.AppendFormat("/"checkbox/":{0},", checkbox);      

        }      

        sb.AppendFormat("/"field/":/"{}/",", field);      

        sb.AppendFormat("/"width/":{0},", width);      

        sb.AppendFormat("/"align/":/"{}/",", align);      

        sb.AppendFormat("/"title/":/"{}/",", title);      

        sb.Remove(sb.Length - , );      

        sb.Append("}");      

        String str = sb.ToString();      

        return str;      

    }      

}

3.后台获取数据(一般处理程序)

 public void GetUserList2(HttpContext context) {      

     List<User> userList = new List<User>();      

     for (int i = ; i < ; i++) {      

         userList.Add(new User {      

             Name = "Name" + (i + ),      

             Age =  + i,      

             Gender = i %  ==  ? "男" : "女",      

             Hobby = i.ToString()      

         });      

     }      

     List<JColumn> colList = new List<JColumn>() {      

         new JColumn{field="Name",title="姓名",width=,align="center"},      

         new JColumn{field="Age",title="年龄",width=,align="center"},      

         new JColumn{field="Gender",title="性别",width=,align="center"},      

         new JColumn{field="Hobby",title="兴趣",width=,align="center"},      

     };      

     JDataGrid dg = new JDataGrid {      

         total=,      

         rows=JDataGrid.ConvertRows(userList),      

         columns=colList,      

     };      

     string strJson = dg.ConvertToJson();      

     HttpResponse response = context.Response;      

     response.ContentType = "text/json";      

     response.Write(strJson);      

 }

对比前面的方法,显示代码通用多了

动态绑定easyui datagrid列名的更多相关文章

  1. jQuery EasyUI datagrid列名包含特殊字符会导致表格错位

    首先申明:本文所述的Bug存在于1.3.3以及更高版本中,其它低版本,本人未测试,太老的版本不想去折腾了. 洒家在写前端的SQL执行工具时,表格用了 jQuery EasyUI datagrid,因为 ...

  2. (转)扩展jquery easyui datagrid 之动态绑定列和数据

    本文转载自:http://blog.csdn.net/littlewolf766/article/details/7336550 easyui datagrid 不支持动态加载列,上次使用的方法是自己 ...

  3. JQuery EasyUI之DataGrid列名和数据列分别设置不同对齐方式(转)

    需求如下 现有数据列三列 Name,Age,CreateDate 数据 张三,18,2000-12-09 :12:34:56 李四,28,2000-12-09 :12:34:56 王麻子,38,200 ...

  4. easyui datagrid标题列宽度自适应

    最近项目中使用easyui做前端界面,相信大部分使用过easyui datagrid的朋友有这么一个疑问:如果在columns中不设置width属性能不能写个方法让datagrid的头部标题和数据主体 ...

  5. EasyUI Datagrid 鼠标悬停显示单元格内容 复制代码

    EasyUI Datagrid 鼠标悬停显示单元格内容 ,halign:, align: 0 « 上一篇:LINQ to Entities 中的查询» 下一篇:去掉字符串中的非数字字符 posted ...

  6. easyui datagrid动态设置行、列、单元格不允许编辑

    Easyui datagrid 行编辑.列编辑.单元格编辑设置 功能: 动态对datagrid 进行行.列.单元格编辑进行设置不允许编辑. 禁用行编辑: 在编辑方法调用前,对选择的行进行判断,如果不允 ...

  7. easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)

    easyui datagrid 禁止选中行   没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...

  8. JQuery easyUI DataGrid 创建复杂列表头(译)

    » Create column groups in DataGrid The easyui DataGrid has ability to group columns, as the followin ...

  9. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(8)-MVC与EasyUI DataGrid 分页

    系列目录 前言 为了符合后面更新后的重构系统,文章于2016-11-1日重写 EasyUI Datagrid在加载的时候会提交一些分页的信息到后台,我们需要根据这些信息来进行数据分页再次返回到前台 实 ...

随机推荐

  1. 云计算(6)--一些MapReduce的例子

    例1:文件的字符串查找 这里reduce不做merge的工作,因为每行都是不一样的,不能merge. 与传统的grep程序相比,使用MapReduce可以加快处理,因为1它是Distributed的, ...

  2. Mybatis之foreach批量插入

    1接口 public boolean insertMembersBatch(@Param("memberList") List<Members> members); @ ...

  3. CentOS7.x安装mariadb-10.3

    1.配置mariadb yum源 vim /etc/yum.repos.d/mariadb.repo # 写入如下内容 [mariadb] name = MariaDB baseurl = http: ...

  4. electron中引入jquery

    <!-- Insert this line above script imports --> <script>if (typeof module === 'object') { ...

  5. jenkins安装和国内镜像配置

    直接替换 $JENKINS_HOME/updates/default.json 成腾讯云的地址即可: JENKINS_HOME=xxxxxxxxx sed -i 's/http:\/\/updates ...

  6. 三十一.MySQL存储引擎 、 数据导入导出 管理表记录 匹配条件

    1.MySQL存储引擎的配置 查看服务支持的存储引擎 查看默认存储类型 更改表的存储引擎 设置数据库服务默认使用的存储引擎 1.1 查看存储引擎信息 mysql> SHOW ENGINES\G ...

  7. AS400遇到的一些问题和解决办法

    1.没有权限进入distribution directory wrklnk 'QDLS\'    >User not enrolled in system distribution direct ...

  8. 第12章、乐活人生的ABCDE

    目录 第12章.乐活人生的ABCDE 什么时候该乐观 让自己乐观的ABC 确认ABC 你的ABC记录 反驳和转移注意 转移注意 反驳 保持距离 学习与自己争辩 证据 其他可能性 暗示 用处 你的反驳记 ...

  9. 简单python脚本,将jupter notebook的ipynb文件转为pdf(包含中文)

    直接执行的python代码ipynb2pdf.py 主要思路.将ipynb文件转成tex文件,然后使用latex编译成pdf.由于latex默认转换不显示中文,需要向tex文件中添加相关中文包. 依赖 ...

  10. P1986 元旦晚会——贪心或差分约束系统

    P1986 元旦晚会 每个人可能属于不同的声部,每个声部最少要有c[i]个人发声: 求最少需要多少话筒: 首先贪心,将所有声部的区间按照右端点大小排序,如果右端点相同,左端点从小到大排序: 贪心每次选 ...