马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

完美实现保存和加载easyui datagrid自定义调整列宽位置隐藏属性功能

[复制链接]
查看2508 | 回复1 | 2019-10-12 10:21:44 | 显示全部楼层 |阅读模式

需求&场景

  例表查询是业务系统中使用最多也是最底子功能,但也是调解最寻常,不同的用户对数据的要求也不一样,以是在系统正式使用后,做为开发恨不得坐在业务边上,根据他们的要求举行调解,需要调解最多就是列的位置和宽度。非常贫苦,而且还会不停的变。最好的方式把这个功能放给用户,让用户自己去调解,并生存在本地,如许就不需要每次做调解了。

实现方法

  由于我这边的项目都是用easyui datagrid开发的,datagrid提供了对每一列宽度的手工调解和位置的拖动功能,但是并没有提供生存修改后属性功能,这里我们就需要对datagrid举行扩展,扩展新增一个生存功能,将修改后的属性生存到浏览器的localstorage,再新增一个初始化的时候读取localstorage的属性举行调解,就可以实现想要的功能了。

demo 网址 http://221.224.21.30:2020/Orders/Index

102144iqa1cf8qmp5q1x6y.gif

代码实现

  easyui datagrid 拖动调解列的位置功能官方已经提供扩展支持https://www.jeasyui.com/extension/columns_ext.php 下载地址 可以获得。

102146az5sf6jwbrjsbf5c.png

现在还需要自界说扩展生存和加载的功能(columns-reset.js)

102146luummz70fusmmj00.gif
102147gkl6lw1tmk5ct5ve.gif
  1. (function ($) {
  2. function buildMenu(target) {
  3. const state = $(target).data('datagrid');
  4. //冻结列不允许修改属性和位置
  5. //const fields = $(target).datagrid('getColumnFields',true).concat($(target).datagrid('getColumnFields', false));
  6. const fields = $(target).datagrid('getColumnFields');
  7. if (!state.columnMenu) {
  8. state.columnMenu = $('<div></div>').appendTo('body');
  9. state.columnMenu.menu({
  10. onClick: function (item) {
  11. if (item.iconCls === 'tree-checkbox1') {
  12. $(target).datagrid('hideColumn', item.name);
  13. $(this).menu('setIcon', {
  14. target: item.target,
  15. iconCls: 'tree-checkbox0'
  16. });
  17. } else if (item.iconCls === 'tree-checkbox0') {
  18. $(target).datagrid('showColumn', item.name);
  19. $(this).menu('setIcon', {
  20. target: item.target,
  21. iconCls: 'tree-checkbox1'
  22. });
  23. } else if (item.iconCls === 'icon-save') {
  24. //生存配置
  25. }
  26. let opts = [];
  27. for (let i = 0; i < fields.length; i++) {
  28. const field = fields[i];
  29. const col = $(target).datagrid('getColumnOption', field);
  30. opts.push(col);
  31. }
  32. //将调解好的属性生存到localstorage中
  33. localStorage.setItem($(target).datagrid('options').id, JSON.stringify(opts));
  34. }
  35. });
  36. state.columnMenu.menu('appendItem', {
  37. text: '生存配置',
  38. name: 'saveconfigitem',
  39. iconCls: 'icon-save'
  40. });
  41. for (let i = 0; i < fields.length; i++) {
  42. const field = fields[i];
  43. const col = $(target).datagrid('getColumnOption', field);
  44. if (col.title !== undefined)
  45. state.columnMenu.menu('appendItem', {
  46. text: col.title,
  47. name: field,
  48. iconCls: !col.hidden ? 'tree-checkbox1' : 'tree-checkbox0'
  49. });
  50. }
  51. }
  52. return state.columnMenu;
  53. }
  54. $.extend($.fn.datagrid.methods, {
  55. columnMenu: function (jq) {
  56. return buildMenu(jq[0]);
  57. },
  58. resetColumns: function (jq) {
  59. return jq.each(function () {
  60. const opts = $(this).datagrid('options');
  61. const local = JSON.parse(localStorage.getItem(opts.id));
  62. //冻结的列不参与设置
  63. //const fields = $(this).datagrid('getColumnFields', true).concat($(this).datagrid('getColumnFields', false));
  64. //const fields = $(this).datagrid('getColumnFields');
  65. if (local !== null) {
  66. //load sort datagrid columns
  67. let sortcolumns = [];
  68. for (let i = 0; i < local.length; i++) {
  69. const field = local[i].field;
  70. const localboxwidth = local[i].boxWidth;
  71. const localwidth = local[i].width;
  72. const localhidden = local[i].hidden || false;
  73. let col = $(this).datagrid('getColumnOption', field);
  74. //修改列的宽度和隐藏属性
  75. col.boxWidth = localboxwidth;
  76. col.width = localwidth;
  77. col.hidden = localhidden;
  78. sortcolumns.push(col);
  79. }
  80. $(this).datagrid({
  81. columns: [sortcolumns]
  82. }).datagrid('columnMoving');
  83. }
  84. });
  85. }
  86. });
  87. })(jQuery);
复制代码
columns-reset.js

datagrid 代码

102147pbuczj22qcnk9tbw.gif
102147xdd4b2a7snv8naef.gif
  1. //初始化界说datagrid
  2. var $dg = $('#orders_datagrid');
  3. $(() => {
  4. //界说datagrid结构
  5. $dg.datagrid({
  6. rownumbers: true,
  7. checkOnSelect: false,
  8. selectOnCheck: true,
  9. idField: 'Id',
  10. sortName: 'Id',
  11. sortOrder: 'desc',
  12. remoteFilter: true,
  13. singleSelect: false,
  14. url: '/Orders/GetDataAsync',
  15. method: 'get',
  16. onClickCell: onClickCell,
  17. pagination: true,
  18. striped: true,
  19. onHeaderContextMenu: function (e, field) {
  20. e.preventDefault();
  21. $(this).datagrid('columnMenu').menu('show', {
  22. left: e.pageX,
  23. top: e.pageY
  24. });
  25. },
  26. onBeforeLoad: function () {
  27. //datagrid resize when jarvisWidgets resized.
  28. const that = $(this);
  29. $(window).on("resize.jarvisWidgets", () => {
  30. that.datagrid('resize');
  31. })
  32. },
  33. onLoadSuccess: function (data) {
  34. editIndex = undefined;
  35. },
  36. onCheck: function () {
  37. $("button[name*='deletebutton']").prop("disabled", false);
  38. },
  39. onUncheck: function () {
  40. },
  41. onSelect: function (index, row) {
  42. order = row;
  43. },
  44. onBeginEdit: function (index, row) {
  45. //const editors = $(this).datagrid('getEditors', index);
  46. },
  47. onEndEdit: function (index, row) {
  48. editIndex = undefined;
  49. },
  50. onBeforeEdit: function (index, row) {
  51. editIndex = index;
  52. row.editing = true;
  53. $("button[name*='deletebutton']").prop("disabled", false);
  54. $("button[name*='cancelbutton']").prop("disabled", false);
  55. $("button[name*='savebutton']").prop("disabled", false);
  56. $(this).datagrid('refreshRow', index);
  57. },
  58. onAfterEdit: function (index, row) {
  59. row.editing = false;
  60. $(this).datagrid('refreshRow', index);
  61. },
  62. onCancelEdit: function (index, row) {
  63. row.editing = false;
  64. editIndex = undefined;
  65. $("button[name*='deletebutton']").prop("disabled", false);
  66. $("button[name*='savebutton']").prop("disabled", true);
  67. $("button[name*='cancelbutton']").prop("disabled", true);
  68. $(this).datagrid('refreshRow', index);
  69. },
  70. frozenColumns: [[
  71. /*开启CheckBox选择功能*/
  72. { field: 'ck', checkbox: true },
  73. {
  74. field: 'action',
  75. title: '@Html.L("Command")',
  76. width: 85,
  77. sortable: false,
  78. resizable: true,
  79. formatter: function showdetailsformatter(value, row, index) {
  80. if (!row.editing) {
  81. return `<div class="btn-group">\
  82. <button onclick="showdetailswindow('${row.Id}', ${index})" class="btn btn-default btn-xs" title="查看明细" ><i class="fa fa-pencil-square-o"></i> </button>\
  83. <button onclick="deleteRow('${row.Id}',${index})" class="btn btn-default btn-xs" title="删除记录" ><i class="fa fa-trash-o"></i> </button>\
  84. </div>`;
  85. } else {
  86. return `<button class="btn btn-default btn-xs" disabled title="查看明细" ><i class="fa fa-pencil-square-o"></i> </button>`;
  87. }
  88. }
  89. }
  90. ]],
  91. columns: [[
  92. { /*Id*/
  93. field: 'Id',
  94. title: '@Html.DisplayNameFor(model => model.Id)',
  95. width: 120,
  96. sortable: true,
  97. resizable: true,
  98. hidden: true
  99. },
  100. { /*订单号*/
  101. field: 'OrderNo',
  102. title: '@Html.DisplayNameFor(model => model.OrderNo)',
  103. width: 130,
  104. hidden: false,
  105. editor: {
  106. type: 'textbox',
  107. options: { prompt: '@Html.DisplayNameFor(model => model.OrderNo)', required: true, validType: 'length[12,12]' }
  108. },
  109. sortable: true,
  110. resizable: true
  111. },
  112. { /*订单所属的客户*/
  113. field: 'Customer',
  114. title: '@Html.DisplayNameFor(model => model.Customer)',
  115. width: 130,
  116. hidden: false,
  117. editor: {
  118. type: 'textbox',
  119. options: { prompt: '@Html.DisplayNameFor(model => model.Customer)', required: true, validType: 'length[0,30]' }
  120. },
  121. sortable: true,
  122. resizable: true
  123. },
  124. { /*发货地址*/
  125. field: 'ShippingAddress',
  126. title: '@Html.DisplayNameFor(model => model.ShippingAddress)',
  127. width: 300,
  128. hidden: false,
  129. editor: {
  130. type: 'textbox',
  131. options: { prompt: '@Html.DisplayNameFor(model => model.ShippingAddress)', required: true, validType: 'length[0,200]' }
  132. },
  133. sortable: true,
  134. resizable: true
  135. },
  136. { /*备注*/
  137. field: 'Remark',
  138. title: '@Html.DisplayNameFor(model => model.Remark)',
  139. width: 260,
  140. hidden: false,
  141. editor: {
  142. type: 'textbox',
  143. options: { prompt: '@Html.DisplayNameFor(model => model.Remark)', required: false, validType: 'length[0,100]' }
  144. },
  145. sortable: true,
  146. resizable: true
  147. },
  148. { /*订单日期默认当天*/
  149. field: 'OrderDate',
  150. title: '@Html.DisplayNameFor(model => model.OrderDate)',
  151. width: 120,
  152. align: 'right',
  153. hidden: false,
  154. editor: {
  155. type: 'datebox',
  156. options: { prompt: '@Html.DisplayNameFor(model => model.OrderDate)', required: true }
  157. },
  158. formatter: dateformatter,
  159. sortable: true,
  160. resizable: true
  161. },
  162. ]]
  163. }).datagrid('columnMoving')
  164. .datagrid('resetColumns');
  165. <script src="~/Scripts/easyui/plugins/columns-reset.js"></script>
复制代码
order index.html

另外做一个小广告

本人可以利用一些业余时间承接一些小项目标开发,有需求的可以互助,下面是我做过的一些项目,开发周期1周出原型,每周与客户确认开发成果,1个月完成订定的功能,1-2周时间上线调优交付(包罗源代码)费用差不多2-5万之间

一个简朴TMS系统 1个月时间完成开发 DEMO http://221.224.21.30:2018/

102147l6eevleih8vclh08.png

一个简朴堆栈QC加收出管理系统 1个月时间完成开发 DEMO http://221.224.21.30:2022/

102148hbgdadhxg8exgbhb.png

集卡运输系统 1个月时间完成开发 DEMO http://221.224.21.30:2021/

102149wog03i8vefewi386.png

102150px55umpzpu35lz8s.png

102150moe7qjzc77yiolzs.png

102151xed6dr0emcdz8exd.png







来源:https://www.cnblogs.com/neozhu/p/11639362.html
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则