纽威
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

664 lines
26 KiB

3 years ago
  1. @{
  2. ViewBag.Title = "Index";
  3. Layout = "~/Views/Shared/_Index.cshtml";
  4. }
  5. <style>
  6. .btn-primary {
  7. margin-right: 2px;
  8. }
  9. .topPanel .toolbar {
  10. float: left;
  11. }
  12. /*.ui-jqgrid tr.jqgrow td {
  13. white-space: normal !important;
  14. height: auto;
  15. }*/
  16. </style>
  17. <script src="~/Content/js/CommonReport/CommonReport.js"></script>
  18. <script>
  19. //var _MenuCaption = "";
  20. var _MenuTag = "";
  21. var _MenuID = "";//菜单ID
  22. var _SourceID = "";//数据源ID
  23. var _sqlTxt = "";//加上参数的sql
  24. var _sqlTxt_Condition = new Array();//加上过滤条件的sql
  25. var _sqlTxt_AddCondition = "";//加上过滤条件的sql
  26. var _IsExistsDataSource = "";
  27. var _DBName = "";//s数据库
  28. var _Cols = new Array();//列
  29. var _ReportName = "";
  30. var _Filter = "";
  31. var _TempName = "";
  32. var _footerrow = false;//是否有合计项
  33. var _footercols = new Array();//合计项
  34. var _formatcols = new Array();//个性化项
  35. var _formatcols_Row = new Array();//个性化项的行
  36. var _Mergercols = new Array();//合并项
  37. var _XCol = "";
  38. var dataRR = "";
  39. var _HiddenCols = new Array();
  40. $(function () {
  41. //1、获取当前页菜单名
  42. GetMenuID();
  43. //2、获取菜单设置
  44. GetMenu();
  45. //gridList();
  46. $(window).resize(function () {
  47. $("#gridList").setGridWidth($(window).width() * 0.99);
  48. $("#gridList").setGridWidth(document.body.clientWidth * 0.99);
  49. $("#gridList").setGridHeight($(window).height() - 132);
  50. $("#gridList").setGridHeight(document.body.clientHeight - 132);
  51. });
  52. });
  53. //1、获取当前页菜单名
  54. function GetMenuID() {
  55. var cc = self.frameElement.getAttribute('id');
  56. _MenuID = cc.replace("iframe", "");
  57. //_MenuTag = $.request("MenuTag");
  58. //$.ajax({
  59. // url: "/SystemManage/CommonReport/GetMenuID?MenuTag=" + _MenuTag + "&" + Math.random(),
  60. // dataType: "json",
  61. // async: false,
  62. // success: function (data) {
  63. // if (data != false && data != null && data.length > 0) {
  64. // _MenuID = data[0].MenuID;
  65. // }
  66. // else {
  67. // alert("获取菜单ID异常,请查看菜单配置并刷新:" + data);
  68. // }
  69. // },
  70. // error: function (aa) {
  71. // alert("异常:" + aa.responseText);
  72. // }
  73. //});
  74. }
  75. //2、获取菜单设置 URL 列 等
  76. function GetMenu() {
  77. $.ajax({
  78. url: "/SystemManage/CommonReport/GetMenu?MenuID=" + _MenuID + "&" + Math.random(),
  79. dataType: "json",
  80. async: false,
  81. success: function (data) {
  82. if (data != false && data != null) {
  83. _sqlTxt = data.sqlTxt;
  84. _sqlTxt_AddCondition = data.sqlTxt;
  85. _DBName = data.DBName;
  86. _SourceID = data.SourceID;
  87. _IsExistsDataSource = data.IsExistsDataSource;
  88. _ReportName = data.ReportName;
  89. _XCol = data.XCol;
  90. _Mergercols = eval(data.Mergercols);
  91. _formatcols = data.formatcols;
  92. _TempName = data.TempName;
  93. _footerrow = data.footerrow;
  94. _footercols = eval(data.footercols);
  95. _Cols = SetCols(eval(data.Cols));
  96. _HiddenCols = eval(data.HiddenCols);
  97. btn_Filter();
  98. }
  99. else {
  100. alert("获取菜单栏位等信息异常。" + data);
  101. }
  102. },
  103. error: function (aa) {
  104. alert("异常:" + aa.responseText);
  105. }
  106. });
  107. }
  108. //个性化栏位背景色
  109. function addCellAttr(rowId, val, rawObject, cm, rdata) {
  110. var rr = ' id=\'' + cm.name + '' + rowId + "\' ";
  111. var formatList = Getformatcol(_formatcols, cm.name);//获取format所有条件
  112. if (formatList != null && formatList.length > 0) {
  113. for (var i = 0; i < formatList.length; i++) {
  114. var formatcol = formatList[i];//条件
  115. var IsRow = false;
  116. if (formatcol.AllRowFlag) {
  117. IsRow = true;
  118. var rr = {
  119. rowid: rowId - 1,
  120. backgroundcolor: formatcol.Color,
  121. }
  122. }
  123. var FormatDataType = formatcol.DataType;
  124. var LogStr = GetLogStringByNum(parseInt(formatcol.LogStr));
  125. if (FormatDataType != "日期型") {
  126. switch (LogStr) {
  127. case "等于": if (val == formatcol.SValue) {
  128. if (IsRow) { _formatcols_Row.push(rr); }
  129. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  130. }
  131. break;
  132. case "不等于": if (val != formatcol.SValue) {
  133. if (IsRow) { _formatcols_Row.push(rr); }
  134. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  135. }
  136. break;
  137. case "小于": if (val < formatcol.SValue) {
  138. if (IsRow) { _formatcols_Row.push(rr); }
  139. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  140. }
  141. break;
  142. case "大于": if (val > formatcol.SValue) {
  143. if (IsRow) { _formatcols_Row.push(rr); }
  144. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  145. }
  146. break;
  147. case "小于等于": if (val <= formatcol.SValue) {
  148. if (IsRow) { _formatcols_Row.push(rr); }
  149. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  150. }
  151. break;
  152. case "大于等于": if (val >= formatcol.SValue) {
  153. if (IsRow) { _formatcols_Row.push(rr); }
  154. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  155. }
  156. break;
  157. case "范围内": if (val >= formatcol.SValue && val <= formatcol.DValue) {
  158. if (IsRow) { _formatcols_Row.push(rr); }
  159. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  160. }
  161. break;
  162. case "范围外": if (val < formatcol.SValue || val > formatcol.DValue) {
  163. if (IsRow) { _formatcols_Row.push(rr); }
  164. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  165. }
  166. break;
  167. case "包含": if (val.indexOf(formatcol.SValue) != -1) {
  168. if (IsRow) { _formatcols_Row.push(rr); }
  169. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  170. }
  171. break;
  172. case "头部包含": if (val.indexOf(formatcol.SValue) == 0) {
  173. if (IsRow) { _formatcols_Row.push(rr); }
  174. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  175. }
  176. break;
  177. case "尾部包含": if (val.indexOf(formatcol.SValue) == formatcol.length - val.length) {
  178. if (IsRow) { _formatcols_Row.push(rr); }
  179. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  180. }
  181. break;
  182. case "不包含": if (val.indexOf(formatcol.SValue) == -1) {
  183. if (IsRow) { _formatcols_Row.push(rr); }
  184. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  185. }
  186. break;
  187. }
  188. }
  189. else {
  190. //日期型
  191. if (val.length >= 10)
  192. {
  193. var VV = val.substring(0, 10);
  194. switch (LogStr) {
  195. case "等于":
  196. if (VV== formatcol.SValue) {
  197. if (IsRow) { _formatcols_Row.push(rr); }
  198. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  199. }
  200. break;
  201. case "不等于": if (VV != formatcol.SValue) {
  202. if (IsRow) { _formatcols_Row.push(rr); }
  203. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  204. }
  205. break;
  206. case "小于":
  207. if (VV < formatcol.SValue) {
  208. if (IsRow) { _formatcols_Row.push(rr); }
  209. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  210. }
  211. break;
  212. case "大于": if (VV > formatcol.SValue) {
  213. if (IsRow) { _formatcols_Row.push(rr); }
  214. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  215. }
  216. break;
  217. case "小于等于": if (VV <= formatcol.SValue) {
  218. if (IsRow) { _formatcols_Row.push(rr); }
  219. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  220. }
  221. break;
  222. case "大于等于": if (VV >= formatcol.SValue) {
  223. if (IsRow) { _formatcols_Row.push(rr); }
  224. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  225. }
  226. break;
  227. case "范围内": if (VV >= formatcol.SValue && VV <= formatcol.DValue) {
  228. if (IsRow) { _formatcols_Row.push(rr); }
  229. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  230. }
  231. break;
  232. case "范围外": if (VV < formatcol.SValue || VV > formatcol.DValue) {
  233. if (IsRow) { _formatcols_Row.push(rr); }
  234. else { rr += "style='background-color:" + formatcol.Color + "'"; return rr; }
  235. }
  236. break;
  237. }
  238. }
  239. }
  240. }
  241. }
  242. return rr;
  243. }
  244. //个性化栏位背景色
  245. function addCellAttr_ID(rowId, val, rawObject, cm, rdata) {
  246. var rr = ' id=\'' + cm.name + '' + rowId + "\' ";
  247. return rr;
  248. }
  249. function Getformatcol(formatcols, colname) {
  250. var formatList = new Array();
  251. if (formatcols != null && formatcols.length > 0) {
  252. for (var i = 0; i < formatcols.length; i++) {
  253. if (formatcols[i].ColFiledName == colname) {
  254. formatList.push(formatcols[i]);
  255. }
  256. }
  257. }
  258. return formatList;
  259. }
  260. //生成colModel
  261. function SetCols(datacols) {
  262. var cols = new Array();
  263. if (datacols != null && datacols.length > 0) {
  264. for (var i = 0; i < datacols.length; i++) {
  265. var ColCaption = datacols[i].ColCaption;
  266. var ColFiledName = datacols[i].ColFiledName;
  267. var DataType = datacols[i].DataType;
  268. var DataTypeStr = GetDataTypeByNum(DataType);
  269. var ColWidth = datacols[i].ColWidth;
  270. var DeciamlNum = datacols[i].DeciamlNum;
  271. var sortable = datacols[i].sortable;
  272. var ColMerFlag = datacols[i].ColMerFlag;
  273. var IsFormat = datacols[i].IsFormat;
  274. var obj = new Array();
  275. if (IsFormat == "1") {
  276. obj = {
  277. label: ColCaption,
  278. name: ColFiledName,
  279. width: ColWidth,
  280. align: "left",
  281. sortable: sortable,
  282. cellattr: addCellAttr,
  283. }
  284. }
  285. else {
  286. obj = {
  287. label: ColCaption,
  288. name: ColFiledName,
  289. width: ColWidth,
  290. align: "left",
  291. sortable: sortable,
  292. cellattr: addCellAttr_ID,
  293. }
  294. }
  295. switch (DataTypeStr) {
  296. case "数值型":
  297. var Formatoptions = new { decimalPlaces: DeciamlNum };
  298. obj.push({ formatter: "number" });
  299. obj.push({ formatoptions: Formatoptions });
  300. break;
  301. case "字符型":
  302. case "日期型":
  303. case "布尔值":
  304. break;
  305. }
  306. //if (IsFormat) {
  307. // obj.push({ cellattr: addCellAttr });
  308. //}
  309. cols.push(obj);
  310. }
  311. var collast = { label: "", name: "", width: "20", align: "left", sortable: false };
  312. cols.push(collast);
  313. }
  314. return cols;
  315. }
  316. function gridList() {
  317. document.getElementById("gridPanel").innerHTML = ' <table id="gridList"></table> <div id="gridPager"></div>';//重置grid
  318. _formatcols_Row = new Array();
  319. var $gridList = $("#gridList");
  320. var condion = new Array();
  321. if (_sqlTxt_Condition != undefined && _sqlTxt_Condition.length > 0)
  322. {
  323. condion = _sqlTxt_Condition;
  324. }
  325. $gridList.dataGrid({
  326. //url: "/SystemManage/CommonReport/GetGridJson",
  327. url: "/SystemManage/CommonReport/GetGridJsonNew",
  328. height: $(window).height() - 132,
  329. // postData: { sqlTxt: _sqlTxt_AddCondition, DBName: _DBName, TempName: _TempName },
  330. postData: { MenuID: _MenuID, sqlTxt_Condition: JSON.stringify(condion), DBName: _DBName, TempName: _TempName },
  331. colModel: _Cols,
  332. pager: "#gridPager",
  333. //sortname: ' ',
  334. //sortorder: ' ',
  335. sortname: _XCol,
  336. sortorder: ' ',
  337. viewrecords: true,
  338. footerrow: _footerrow,
  339. gridComplete: function () {
  340. var strIds = $("#gridList").jqGrid("getDataIDs");
  341. if (_formatcols_Row.length > 0) {
  342. for (var i = 0; i < _formatcols_Row.length; i++) {
  343. $("#" + strIds[_formatcols_Row[i].rowid] + " td").css("background-color", _formatcols_Row[i].backgroundcolor);
  344. }
  345. }
  346. //$("#"+ids[ii]+ " td").css("background-color","red");
  347. //合并行
  348. if (_Mergercols != undefined && _Mergercols.length > 0) {
  349. for (var i = 0; i < _Mergercols.length; i++) {
  350. Merger("gridList", _Mergercols[i]);
  351. }
  352. }
  353. //合计
  354. if (_footerrow == true) {
  355. var footerData = {};
  356. for (var i = 0; i < _footercols.length; i++) {
  357. var total = 0;
  358. for (var j = 0; j < strIds.length; j++) {
  359. var qty = $("#gridList").jqGrid("getCell", strIds[j], _footercols[i]);
  360. if (qty != "") {
  361. total += parseInt(qty);
  362. }
  363. }
  364. footerData[_footercols[i]] = total;
  365. }
  366. $("#gridList").footerData('set', footerData);
  367. $("#gridList").footerData('set', { "rn": "合计" });
  368. }
  369. //隐藏列(不可见/无权限)
  370. if (_HiddenCols != null && _HiddenCols.length > 0)
  371. {
  372. for (var j = 0; j < _HiddenCols.length; j++)
  373. {
  374. $("#gridList").setGridParam().hideCol(_HiddenCols[j].ColFiledName);
  375. }
  376. }
  377. },
  378. loadError: function (data) {
  379. alert("异常:");
  380. }
  381. });
  382. $("#btn_search").click(function () {
  383. $gridList.jqGrid('setGridParam', {
  384. //sqlTxt: _sqlTxt_AddCondition, DBName: _DBName, TempName: _TempName
  385. MenuID: _MenuID, sqlTxt_Condition: JSON.stringify(condion), DBName: _DBName, TempName: _TempName
  386. }).trigger('reloadGrid');
  387. });
  388. }
  389. //过滤
  390. function btn_Filter() {
  391. $.modalOpen({
  392. id: "Filer",
  393. title: "过滤条件",
  394. url: "/SystemManage/CommonReport/Filter?MenuID=" + _MenuID + "&SourceID=" + _SourceID + "&" + Math.random(),
  395. width: "800px",
  396. height: "570px",
  397. btn: ['确认', '关闭'],
  398. callBack: function (iframeId) {
  399. _sqlTxt_Condition = eval(top.frames[iframeId].submitForm());
  400. //_sqlTxt_AddCondition = _sqlTxt;
  401. if (_sqlTxt_Condition != undefined) {
  402. // if (_sqlTxt_Condition.length > 0) {
  403. // for (var i = 0; i < _sqlTxt_Condition.length; i++) {
  404. // _sqlTxt_AddCondition = ReplaceALL(_sqlTxt_AddCondition, _sqlTxt_Condition[i].CIndex, _sqlTxt_Condition[i].Content);
  405. // }
  406. // }
  407. top.frames[iframeId].Close();
  408. gridList();
  409. }
  410. }
  411. });
  412. }
  413. //数据源
  414. function btn_DataSource() {
  415. $.modalOpen({
  416. id: "DataSource",
  417. title: "数据源",
  418. url: "/SystemManage/CommonReport/DataSource?MenuID=" + _MenuID,//+ "&" + Math.random(),
  419. width: "1300px",
  420. height: "570px",
  421. btn: ['确认', '关闭'],
  422. callBack: function (iframeId) {
  423. dataRR = top.frames[iframeId].submitForm();
  424. if (dataRR == "Error")
  425. { }
  426. else {
  427. GetMenu();
  428. }
  429. }
  430. });
  431. }
  432. //列设置
  433. function btn_Cols() {
  434. if (_IsExistsDataSource != "1") {
  435. alert("请先设置数据源");
  436. }
  437. else {
  438. $.modalOpen({
  439. id: "Cols",
  440. title: "列设置",
  441. url: "/SystemManage/CommonReport/Cols?SourceID=" + _SourceID + "&MenuID=" + _MenuID + "&" + Math.random(),
  442. width: "1300px",
  443. height: "570px",
  444. btn: ['确认', '关闭'],
  445. callBack: function (iframeId) {
  446. top.frames[iframeId].submitForm();
  447. GetMenu();
  448. }
  449. });
  450. }
  451. }
  452. //个性化设置
  453. function btn_GridFormat() {
  454. if (_IsExistsDataSource != "1") {
  455. alert("请先设置数据源");
  456. }
  457. else {
  458. $.modalOpen({
  459. id: "GridFormat",
  460. title: "个性化设置",
  461. url: "/SystemManage/CommonReport/GridFormat?SourceID=" + _SourceID + "&" + Math.random(),
  462. width: "800px",
  463. height: "570px",
  464. btn: null,
  465. callBack: function (iframeId) {
  466. GetMenu();
  467. }
  468. });
  469. }
  470. }
  471. //多表头设置
  472. function btn_GridHeader() {
  473. if (_IsExistsDataSource != "1") {
  474. alert("请先设置数据源");
  475. }
  476. else {
  477. $.modalOpen({
  478. id: "GridHeader",
  479. title: "多表头设置",
  480. url: "/SystemManage/CommonReport/GridHeader?SourceID=" + _SourceID + "&" + Math.random(),
  481. width: "1300px",
  482. height: "570px",
  483. btn: ['确认', '关闭'],
  484. callBack: function (iframeId) {
  485. top.frames[iframeId].submitForm();
  486. GetMenu();
  487. }
  488. });
  489. }
  490. }
  491. //清空本菜单所有数据源相关设置
  492. function btn_Clear() {
  493. $.deleteForm({
  494. url: "/SystemManage/CommonReport/ClearAll?" + Math.random(),
  495. param: { MenuID: _MenuID },
  496. success: function () {
  497. _SourceID = "";//数据源ID
  498. _sqlTxt = "";//加上参数的sql
  499. _sqlTxt_AddCondition = "";//加上过滤条件的sql
  500. _TempName = "";
  501. _IsExistsDataSource = "";
  502. _DBName = "";//s数据库
  503. _Cols = new Array();//列
  504. _Filter = "";
  505. _footerrow = false;//是否有合计项
  506. _footercols = new Array();//合计项
  507. _formatcols = new Array();//个性化项
  508. _formatcols_Row = new Array();//个性化项的行
  509. _Mergercols = new Array();//合并项
  510. document.getElementById("gridPanel").innerHTML = ' <table id="gridList"></table> <div id="gridPager"></div>';
  511. },
  512. error: function (aa) {
  513. alert("异常", aa.responseText);
  514. }
  515. });
  516. }
  517. function btn_ExportAll()
  518. {
  519. var condion = new Array();
  520. if (_sqlTxt_Condition != undefined && _sqlTxt_Condition.length > 0) {
  521. condion = _sqlTxt_Condition;
  522. }
  523. //var data = "&sqlTxt=" + encodeURIComponent(_sqlTxt_AddCondition) + "&DBName=" + _DBName + "&TempName=" + _TempName + "&MenuID=" + _MenuID;
  524. var data = "&sqlTxt=" + encodeURIComponent(JSON.stringify(condion)) + "&DBName=" + _DBName + "&TempName=" + _TempName + "&MenuID=" + _MenuID;
  525. $.download("/SystemManage/CommonReport/ExportAllNew?" + Math.random(), data, 'post');
  526. }
  527. function btn_WatchPanel() {
  528. var condion = new Array();
  529. if (_sqlTxt_Condition != undefined && _sqlTxt_Condition.length > 0) {
  530. condion = _sqlTxt_Condition;
  531. }
  532. $.modalOpen({
  533. id: "WatchPanel",
  534. title: _ReportName + "看板显示",
  535. url: "/SystemManage/CommonReport/WatchPanel?_MenuID=" + _MenuID + "&_sqlTxt_Condition=" + escape(JSON.stringify(condion)) + "&TempName=" + escape(_TempName) + "&" + Math.random(),
  536. width: "1300px",
  537. height: "570px",
  538. btn: null,
  539. callBack: function (iframeId) {
  540. top.frames[iframeId].submitForm();
  541. GetMenu();
  542. }
  543. });
  544. }
  545. //角色显示栏位
  546. function btn_ColsVisible()
  547. {
  548. $.modalOpen({
  549. id: "ColsVisible",
  550. title: _ReportName + " 角色显示栏位",
  551. url: "/SystemManage/CommonReport/ColsVisible?MenuID=" + _MenuID + "&IsCommon=Y&Cols=&" + Math.random(),
  552. width: "1000px",
  553. height: "570px",
  554. btn: null,
  555. callBack: function (iframeId) {
  556. alert("111");
  557. GetMenu();
  558. }
  559. });
  560. }
  561. </script>
  562. <div class="topPanel">
  563. <div class="toolbar">
  564. <div class="btn-group">
  565. <a class="btn btn-primary" onclick="$.reload()"><span class="glyphicon glyphicon-refresh"></span></a>
  566. <a class="btn btn-primary dropdown-text" onclick="btn_Filter()"><i class="fa fa-filter"></i>过滤</a>
  567. </div>
  568. <div class="btn-group">
  569. <a id="NF-DataSource" authorize="yes" class="btn btn-primary dropdown-text" onclick="btn_DataSource()"><i class="fa fa-database"></i>设置数据源</a>
  570. <a id="NF-Cols" authorize="yes" class="btn btn-primary dropdown-text" onclick="btn_Cols()"><i class="fa fa-text-width"></i>列设置</a>
  571. <a id="NF-GridFormat" authorize="yes" class="btn btn-primary dropdown-text" onclick="btn_GridFormat()"><i class="fa fa-bars"></i>个性化设置</a>
  572. <a id="NF-Clear" authorize="yes" class="btn btn-primary dropdown-text" onclick="btn_Clear()"><i class="fa fa-times"></i>清空本菜单所有设置</a>
  573. <a id="NF-ExportAll" authorize="yes" class="btn btn-primary dropdown-text" onclick="btn_ExportAll()"><i class="fa fa-download"></i>全部导出</a>
  574. <a id="NF-WatchPanel" authorize="yes" class="btn btn-primary dropdown-text" onclick="btn_WatchPanel()"><i class="fa fa-download"></i>看板显示</a>
  575. <a id="NF-ColsVisible" authorize="yes" class="btn btn-primary dropdown-text" onclick="btn_ColsVisible()"><i class="fa fa-user"></i>角色显示栏位</a>
  576. @*<a id="NF-GridHeader" authorize="yes" class="btn btn-primary dropdown-text" onclick="btn_GridHeader()"><i class="fa fa-list-alt"></i>多表头设置</a>*@
  577. </div>
  578. <script>$('.toolbar').authorizeButton()</script>
  579. </div>
  580. </div>
  581. <div class="gridPanel" id="gridPanel">
  582. <table id="gridList"></table>
  583. <div id="gridPager"></div>
  584. </div>