动态绑定easyui datagrid列名
根据实时数据在同一个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列名的更多相关文章
- jQuery EasyUI datagrid列名包含特殊字符会导致表格错位
首先申明:本文所述的Bug存在于1.3.3以及更高版本中,其它低版本,本人未测试,太老的版本不想去折腾了. 洒家在写前端的SQL执行工具时,表格用了 jQuery EasyUI datagrid,因为 ...
- (转)扩展jquery easyui datagrid 之动态绑定列和数据
本文转载自:http://blog.csdn.net/littlewolf766/article/details/7336550 easyui datagrid 不支持动态加载列,上次使用的方法是自己 ...
- JQuery EasyUI之DataGrid列名和数据列分别设置不同对齐方式(转)
需求如下 现有数据列三列 Name,Age,CreateDate 数据 张三,18,2000-12-09 :12:34:56 李四,28,2000-12-09 :12:34:56 王麻子,38,200 ...
- easyui datagrid标题列宽度自适应
最近项目中使用easyui做前端界面,相信大部分使用过easyui datagrid的朋友有这么一个疑问:如果在columns中不设置width属性能不能写个方法让datagrid的头部标题和数据主体 ...
- EasyUI Datagrid 鼠标悬停显示单元格内容 复制代码
EasyUI Datagrid 鼠标悬停显示单元格内容 ,halign:, align: 0 « 上一篇:LINQ to Entities 中的查询» 下一篇:去掉字符串中的非数字字符 posted ...
- easyui datagrid动态设置行、列、单元格不允许编辑
Easyui datagrid 行编辑.列编辑.单元格编辑设置 功能: 动态对datagrid 进行行.列.单元格编辑进行设置不允许编辑. 禁用行编辑: 在编辑方法调用前,对选择的行进行判断,如果不允 ...
- easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)
easyui datagrid 禁止选中行 没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...
- JQuery easyUI DataGrid 创建复杂列表头(译)
» Create column groups in DataGrid The easyui DataGrid has ability to group columns, as the followin ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(8)-MVC与EasyUI DataGrid 分页
系列目录 前言 为了符合后面更新后的重构系统,文章于2016-11-1日重写 EasyUI Datagrid在加载的时候会提交一些分页的信息到后台,我们需要根据这些信息来进行数据分页再次返回到前台 实 ...
随机推荐
- java中的volatile变量
同步与线程间通信: 通信 通信是指消息在两条线程之间传递. 既然要传递消息,那接收线程 和 发送线程之间必须要有个先后关系,此时就需要用到同步.通信和同步是相辅相成的. 同步 同步是指,控制多条线程之 ...
- Visual Studio Code IDE开发插件配置
[PHP通用集成环境] PHP Extension Pack #PHP拓展包,PHP开发最重要的拓展 PHP Intelephense #PHP自动补全工具 PHP IntelliSense #PHP ...
- 关于Maven打包
Maven打包构建完全指南和最佳实践 Maven最佳实践:划分模块 IDEA一个项目引用另一个项目 IDEA创建多个模块MavenSpringBoot项目 这个简单明了,基础知识
- MongoDB 系统分析器
1.1 系统分析器作用 可以利用系统分析器(system profiler)来查找耗时过长的操作. 系统分析器可记录特殊集合system.profile中的操作,并提供大量有关耗时长的操作信息,但相应 ...
- 十四.自定义yum仓库、源码编译安装
pc7:192.168.4.7 1.自定义yum仓库1.1 源码仓库下:/root/tools/other]# createrepo .]# ls ntfs-3g-2014.2.15-6.el6.x8 ...
- learning scala Function Composition andThen
Ordering using andThen: f(x) andThen g(x) = g(f(x)) Ordering using compose: f(x) compose g(x) = f(g( ...
- 设计一个树型目录结构的文件系统,其根目录为 root,各分支可以是目录,也可以是文件,最后的叶子都是文件。
设计一个树型目录结构的文件系统,其根目录为 root,各分支可以是目录,也可以是文件,最后的叶子都是文件. 我实现的功能是提供父目录(兄弟目录),输入文件名,创建树型目录结构,文本文件不可以再有子目录 ...
- 数据层面;MySQL查
AND 运算优先于OR运算执行(通过括号进行强化) count(*) 会得到包含NULL的数据行数:count(<列明>)会得到NULL之外的数据行数 SQL语句的总逻辑:书写顺序 sel ...
- python常用函数2
2.reduce()函数 reduce() 函数也是python内置的一个高阶函数.reduce()函数接收的参数和 map()相似,一个函数 f ,一个list,但行为和 map()不同,re ...
- 2019CSP-S初赛知识点汇总
0x00 基本算法 0x01 位运算 0x02 前缀和与差分 0x03 二分 0x04 倍增 0x05 排序 0x06 离散化 0x07 高精度 0x10 数据结构 0x11 栈和队列 0x12 链表 ...