CRUD功能的JqGrid表格

之前的项目也曾用过JgGrid对它的基本功能也是略有了解,网上有个国外的开源的项目,但是不适合个人的风格,所以花了3天空余的时间封装了下JqGrid,也算是参加开发工作10个月以来写的第一个比较完整的小例子,高手们就直接飘过不用看了,但是由于时间短,还有很多的不足,需要后期再完善。

整体思路就是一个配置类,同时兼容了链式编程的风格,所有的动作接口都以Set开头,便于识别记。录下来以后做个人的使用手册。

链式编程风格

  1. @(Html.JqGrid("testJqGrid2", new GridConfiguration
  2. (
  3. ColumnFactory.Create("Name","姓名").SetWidth("300").SetEditable(ColumnEditType.Textarea).SetSearchable(SearchFiledType.String)
  4. ColumnFactory.Create("Id", "编号").SetWidth("300").SetEditable(ColumnEditType.Text).SetSearchable(SearchFiledType.Int)
  5. ColumnFactory.Create("Skin", "肤色").SetWidth("300").SetEditable(ColumnEditType.Textarea),
  6. ColumnFactory.Create(null, "操作").SetWidth("100").SetFormatter("customerFmatter")
  7. )
  8. )
  9. .SetGroupHeaders(new GroupHeader("Name", 2, "<font style=\"color:red;\">详细内容</font>"))
  10. .SetCaption("JqGrid测试").SetHeight("250")
  11. .SetUrl("/Home/GridData", new Dictionary<string, string> { { "name", "halower" } })
  12. .SetSortName("Name").SetSortOrder(SortOrderType.Desc).SetLoadText("正在加载数据请骚等...")
  13. .SetBuiltInOperation(GridOperatorType.Add | GridOperatorType.Edit | GridOperatorType.Delete | GridOperatorType.Search)
  14. .SetPager("pageId2").SetRowList(new[] { 5, 15, 33,55 })
  15. .SetSubGridModel(
  16. ColumnFactory.Create("Name", "姓名").SetWidth("150"),
  17. ColumnFactory.Create("Language", "中文").SetWidth("150"),
  18. ColumnFactory.Create("Country", "国籍").SetWidth("150")
  19. )
  20. .SetSubGridUrl("/Home/SubGridData").SetSubGridPostParams(new[] { "Name" })
  21. .SetEditUrl("/Home/EditPerson").SetMultiselect()
  22. )

配置类为主的混搭风格

  1. 1 @(Html.JqGrid("testJqGrid", new GridConfiguration
  2. 2 {
  3. 3 GridColumns = new List<GridColumn>
  4. 4 {
  5. 5 ColumnFactory.Create("Id", "编号").SetWidth("300").SetEditable(ColumnEditType.Text).SetSearchable(SearchFiledType.Int),
  6. 6 new GridColumn{DisplayName ="姓名",Field ="Name",Width ="300",Editable = true,Search =true},
  7. 7 new GridColumn{DisplayName ="肤色",Field ="Skin",Width ="300",Editable = true,Search =true,SearchFiledType =SearchFiledType.String},
  8. 8 ColumnFactory.Create(null, "操作").SetWidth("100").SetFormatter("customerFmatter")
  9. 9 },
  10. 10 Caption = "JqGrid测试",
  11. 11 Height = "250",
  12. 12 PagerId = "pageId",
  13. 13 SortName ="Name",
  14. 14 Sortorder = SortOrderType.Desc.ToString().ToLower(),
  15. 15 GridOperation = new GridOperation { Add =true,Delete =true,Edit =true,Search =true},
  16. 16 SetGroupHeaders=true,
  17. 17 ColSPanConfiguation=new ColSPanConfiguation{GroupHeaders =new[]{new GroupHeader("Name", 2, "<font style=\"color:red;\">详细内容</font>")}},
  18. 18 LoadText = "正在加载数据请骚等...",
  19. 19 RowList =new []{11,15,20},
  20. 20 SubGridModel = new[]
  21. 21 {
  22. 22 new SubGridTable
  23. 23 (
  24. 24 ColumnFactory.Create("Name", "姓名").SetWidth("150"),
  25. 25 ColumnFactory.Create("Language", "中文").SetWidth("150"),
  26. 26 ColumnFactory.Create("Country", "国籍").SetWidth("150")
  27. 27 )
  28. 28 },
  29. 29 Multiselect = true,
  30. 30 EditUrl = "/Home/EditPerson"
  31. 31 })
  32. 32 .SetUrl("/Home/GridData",null)
  33. 33 .SetSubGridUrl("/Home/SubGridData").SetSubGridPostParams(new[] { "Name" })
  34. 34 )

后台代码实现了排序,查询,分页的全部托管,对增改查也实现了格式限制型的局部托管。

  1. //主表格
  2. public ContentResult GridData(string name)
  3. {
  4. var list = new List<Person>();
  5. for (var i = 0; i < 300000; i++)
  6. {
  7. list.Add(new Person { Id = i + 1, Name = "测试" + (i + 1), Skin = "Yellow" + i });
  8. }
  9. //支持EF分页排序
  10. //var context=new PersonContext();
  11. //context.Persons.Pagination(this);
           //context.Persons.Pagination(this,p=>p.id>15&&p.id<100);  
  12. return Content(list.Pagination(this));
  13. }
  14. //子表格
  15. public string SubGridData(string name)
  16. {
  17. var list = new List<Chinese>();
  18. for (var i = 0; i < 5; i++)
  19. {
  20. list.Add(new Chinese { Id = i + 1, Language = "中文" + i, Name = "子表测试" + (i + 1), Country = "中国" + i });
  21. }
  22. return list.PushSubGrid(this);
  23. }
  24.  
  25. //使用原生的Form提交
  26. public JsonResult EditPerson(Person person, string id)
  27. {
  28. if (!ModelState.IsValidField("Id") && !string.IsNullOrEmpty(id))
              //批量删除
  29. //return Json(id.DelegateBuildInOperation(Bussiness.DeleteInfo, this));
  30. return Json(id.DelegateNotBuildInOperation(Bussiness.DeleteInfo));
  31. var optDic = new Dictionary<OperTypes, Func<Person, bool>>
  32. {
  33. {OperTypes.Add, Bussiness.AddPerson},
  34. {OperTypes.Edit, Bussiness.EditPerson},
  35. {OperTypes.Delete, Bussiness.DeletePerson}
  36. };
  37. return Json(person.DelegateBuildInOperation(optDic, this));
  38. }
  39.  
  40. //自定义非原生提交
  41. public JsonResult AddInfo(int id)
  42. {
  43. return Json(id.DelegateNotBuildInOperation(Bussiness.AddInfo));
  44. }

调整下面的位置,自动进行列顺序【包含主表格和子表格】调整

效果如下:

为什么要使用链式风格,使用接管代码?

1.采用链式风格主要考虑到JQ的风格,同时可以使代码结构和关联度清晰,同时保留配置类可以也让自己习惯传统风格的人自己配置

2.后台接管代码,主要目的是保持UI层的简洁,保持UI层的轻量级,强制使用者将业务转移到服务层去处理。

表格接口方法说明

方法名称 参数类型 功能说明
SetGridKey string    设置表格标识列
SetPager string  设置启用分页,并设置分页控件Id
SetUrl string , Dictionary<string, string>  设置获取主表数据的地址
SetCaption string 设置表格名称
SetRowList                           int[]  设置显示下拉记录数
SetSortName string 设置默认的排序列。可以是列名称或者是一个数字,这个参数会被提交到后台
SetDirection DriectionType 设置表格中的书写方向
SetSortOrder SortOrderType 设置 从服务器读取XML或JSON数据时初始的排序类型
SetLoadText string 设置数据请求和排序时显示的文本
SetPgInput  bool  设置导航栏是否有页码输入框
SetAutoWidth  bool   设置自动宽度
SetAutoEencode  bool  设置为true时,对来自服务器的数据和提交数据进行encodes编码。如<![CDATA[<将被转换为&lt;]]>
SetDataType  ResponseDataType  设置表格希望获得的数据的类型
SetEmptyRecords string 设置当返回(或当前)数量为零时显示的信息此项只用当Setviewrecords 设置为true时才有效。
SetHeight string 设置表格高度。可为数值、百分比或auto
SetMultiselect bool 设置此属性设为true时启用多行选择,出现复选框
SetSubGridUrl string  设置子表数据请求Url
SetSubGridPostParams string[] 设置子表获取数据时所依赖父表字段
SetSubGridModel  GridColumn[] 设置子表格列配置
SetBuiltInOperation GridOperatorType 设置启用内置操作类型
SetGroupHeaders GroupHeader[]  设置表头分组
SetEditUrl string 设置内建编辑新增删除操作URL
SetMultipleSearch bool 设置高级搜索

列方法接口说明

方法名称 参数类型 功能说明
SetWidth string    设置列的初始宽度,可用pixels和百分比
SetHidden bool 定义初始化时,列是否隐藏
SetEditable ColumnEditType 定义定义字段是否可编辑
SetSearchable SearchFiledType 定义搜索
SetSearchable              SearchFiledType ,ColumnSearchType   定义搜索
SetSortable ColumnSortType 启用排序
SetFieldName string, string 设置字段映射名
SetFormatter string 自定义Formatter函数
SetUnformat string 自定义Unformat函数,在修改时需要获取原来的值
SetEditoptions string 设置编辑的一系列选项
SetEitrules string  设置编辑的一系列规则
Frozen bool 设置冻结列

其中对于自定义的多种验证等规则和选项涉及的参数,尚不是很清楚,Eitrules便暂时使用string作为参数在后面在做配置化处理。虽然很简单,不过快过年了,如果有感兴趣的,觉得还是费点体力的,可以考虑赞助我点红包的,联系halower@foxmail.com

 
分类: MVC

CRUD功能的JqGrid表格的更多相关文章

  1. 五分钟搭建起一个包含CRUD功能的JqGrid表格

    之前的项目也曾用过JgGrid对它的基本功能也是略有了解,网上有个国外的开源的项目,但是不适合个人的风格,所以花了3天空余的时间封装了下JqGrid,也算是参加开发工作10个月以来写的第一个比较完整的 ...

  2. [译]MVC网站教程(四):MVC4网站中集成jqGrid表格插件(系列完结)

    目录 1.   介绍 2.   软件环境 3.   在运行示例代码之前(源代码 + 示例登陆帐号) 4.         jqGrid和AJAX 5.         GridSettings 6.  ...

  3. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:实现基本的CRUD功能

    英文渣水平,大伙凑合着看吧…… 这是微软官方SignalR 2.0教程Getting Started with Entity Framework 6 Code First using MVC 5 系列 ...

  4. MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB数据

    看到下图,是通过Jqgrid实现表格数据的基本增删查改的操作.表格数据增删改是一般企业应用系统开发的常见功能,不过不同的是这个表格数据来源是非关系型的数据库MongoDB.nosql虽然概念新颖,但是 ...

  5. 实现基本的CRUD功能

    文] 使用 MVC 5 的 EF6 Code First 入门 系列:实现基本的CRUD功能 2014-04-28 16:29 by Bce, 428 阅读, 0 评论, 收藏, 编辑 英文渣水平,大 ...

  6. MVC5 Entity Framework学习之实现主要的CRUD功能

    在上一篇文章中,我们使用Entity Framework 和SQL Server LocalDB创建了一个MVC应用程序,并使用它来存储和显示数据.在这篇文章中,你将对由 MVC框架自己主动创建的CR ...

  7. 在MVC模式下通过Jqgrid表格操作MongoDB数据

    看到下图,是通过Jqgrid实现表格数据的基本增删查改的操作.表格数据增删改是一般企业应用系统开发的常见功能,不过不同的是这个表格数据来源是非关系型的数据库MongoDB.nosql虽然概念新颖,但是 ...

  8. MVC中使用EF(2):实现基本的CRUD功能

    MVC中使用EF(2):实现基本的CRUD功能 By  Tom Dykstra |July 30, 2013 Translated by litdwg   Contoso University示例网站 ...

  9. 基于SSM之Mybatis接口实现增删改查(CRUD)功能

    国庆已过,要安心的学习了. SSM框架以前做过基本的了解,相比于ssh它更为优秀. 现基于JAVA应用程序用Mybatis接口简单的实现CRUD功能: 基本结构: (PS:其实这个就是用的Mapper ...

随机推荐

  1. Struts1.X与Spring集成——第一种方案

    spring+struts(第一种方案) 集成原理:在Action中取得BeanFactory,通过BeanFactory取得业务逻辑对象,调用业务逻辑方法. 一,新建一个项目Spring_Strut ...

  2. Android提高第二篇之SurfaceView的基本使用

    本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! 上次介绍MediaPlayer的时候略微介绍了SurfaceView,SurfaceView因为能够直接从内存 ...

  3. Android使用开发WebView战斗技能

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/44619181 前段时间做项目的时候.在项目中用了WebView组件,遇到了一些问题 ...

  4. Unit of Work

    ABP使用及框架解析系列 - [Unit of Work part.2-框架实现]   前言 ABP ABP是“ASP.NET Boilerplate Project”的简称. ABP的官方网站:ht ...

  5. 给AspNetPager分页控件添加bootstrap样式

    AspNetPager分页控件算是比较好用的一个分页控件了.想要结合bootstrap使用,官方代码入口 .pagination a[disabled]{ color: #777;cursor: no ...

  6. android sdk linux 文本 64 位置

    android sdk linux 64 之前获得模.现在补上一,然后,小伙伴们下载 版权声明:本文博主原创文章,博客,未经同意不得转载.

  7. 【ThinkingInC++】2、输入和输出流

    /** *特征:输入和输出流 *时间:2014年8月8日07:37:35 *作者:cutter_point */ #include<iostream> using namespace st ...

  8. 正则获取URL参数

    一 获取指定URL参数 function getUrlParams(name) { var reg = new RegExp("(^|&)" + name + " ...

  9. Codeforces 374D Inna and Sequence 二分法+树状数组

    主题链接:点击打开链接 特定n一个操作,m长序列a 下列n的数量 if(co>=0)向字符串加入一个co (開始是空字符串) else 删除字符串中有a的下标的字符 直接在序列上搞.简单模拟 # ...

  10. AFNetWorking POST Multi-Part Request 上传图片

    这些天来,做图片上传的时候,我遇到一个问题.对我来说,这只是一个附加的图片将请求超时,这里是代码: AFHTTPRequestOperationManager *manager = [AFHTTPRe ...