系列索引

Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引

Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数、ColModel API、事件及方法

Web jquery表格组件 JQGrid 的使用 - 5.Pager翻页、搜索、格式化、自定义按钮

Web jquery表格组件 JQGrid 的使用 - 6.准备工作 & Hello JQGrid

Web jquery表格组件 JQGrid 的使用 - 7.查询数据、编辑数据、删除数据

Web jquery表格组件 JQGrid 的使用 - 8.Pager、新增数据、查询、刷新、查看数据

Web jquery表格组件 JQGrid 的使用 - 全部代码

Web jquery表格组件 JQGrid 的使用 - 11.问题研究

JQGrid导出Excel文件

目录

9.http handler 里的全部代码

10.前端的全部代码

9.http handler 里的全部代码

  1. public class UserHandler : IHttpHandler
  2. {
  3. public void ProcessRequest(HttpContext context)
  4. {
  5. //查找
  6. if (context.Request.Params.Get("_search") == "true")
  7. {
  8. string sfilters = context.Request.Params.Get("filters");
  9. context.Response.Write(GetJson(SearchUsersDT(sfilters)));
  10. return;
  11. }
  12. NameValueCollection forms = context.Request.Form;
  13. string strOperation = forms.Get("oper");
  14. string strResponse = string.Empty;
  15. if (strOperation == null)
  16. {
  17. //排序
  18. if (context.Request.Params.Get("sidx") != null &&
  19. !string.IsNullOrEmpty(context.Request.Params.Get("sidx").ToString()) &&
  20. context.Request.Params.Get("sord") != null &&
  21. !string.IsNullOrEmpty(context.Request.Params.Get("sord").ToString()))
  22. {
  23. context.Response.Write(GetJson(GetUserDTSorted(context.Request.Params.Get("sidx").ToStr
  24. ing(), context.Request.Params.Get("sord").ToString())));
  25. return;
  26. }
  27. strResponse = GetJson(GetUserDT()); //load data
  28. }
  29. else if (strOperation == "del")
  30. {
  31. strResponse = DeleteUser(forms.Get("delId").ToString()) ? "删除成功!" :
  32. "删除失败,请确认!";
  33. }
  34. else
  35. {
  36. AddEdit(forms, out strResponse);
  37. }
  38. context.Response.Write(strResponse);
  39. }
  40. private void AddEdit(NameValueCollection forms, out string strResponse)
  41. {
  42. string strOperation = forms.Get("oper");
  43. string strEmpId = string.Empty;
  44. User user = new User();
  45. user.UserCode = forms.Get("UserCode").ToString();
  46. user.Password = forms.Get("Password").ToString();
  47. string sTmp = string.Empty;
  48. if (strOperation == "add")
  49. {
  50. if (CheckUserExist(user.UserCode, ""))
  51. {
  52. sTmp = "用户名重复,请确认!";
  53. }
  54. else
  55. {
  56. sTmp = AddUser(user) ? "用户添加成功!" : "用户添加失败,请确认!";
  57. }
  58. }
  59. else if (strOperation == "edit")
  60. {
  61. user.UserId = int.Parse(forms.Get("UserId").ToString());
  62. if (CheckUserExist(user.UserCode, user.UserId.ToString()))
  63. {
  64. sTmp = "用户名重复,请确认!";
  65. }
  66. else
  67. {
  68. sTmp = UpdateUser(user) ? "用户更新成功!" : "用户更新失败,请确认!
  69. ";
  70. }
  71. }
  72. strResponse = sTmp;
  73. }
  74. public bool IsReusable
  75. {
  76. get
  77. {
  78. return false;
  79. }
  80. }
  81. private DataTable GetUserDT()
  82. {
  83. string cmdText = "SELECT UserId, UserCode, Password FROM T_User";
  84. SQLHelper sqlhelper = new SQLHelper();
  85. DataTable dt = sqlhelper.Selectinfo(cmdText);
  86. return dt;
  87. }
  88. private string GetJson(DataTable dt)
  89. {
  90. JavaScriptSerializer serializer = new JavaScriptSerializer();
  91. List<Dictionary<string, object>> rows = new List<Dictionary<string,
  92. object>>();
  93. Dictionary<string, object> row = null;
  94. foreach (DataRow dr in dt.Rows)
  95. {
  96. row = new Dictionary<string, object>();
  97. foreach (DataColumn col in dt.Columns)
  98. {
  99. string s = dr[col].ToString(); //特殊情况
  100. if (col.ColumnName == "IsAdmin")
  101. {
  102. s = s == "" ? "是" : "否";
  103. }
  104.  
  105. if (col.ColumnName == "HasWrite")
  106. {
  107. s = s == "" ? "是" : "否";
  108. }
  109. row.Add(col.ColumnName.Trim(), s);
  110. }
  111. rows.Add(row);
  112. }
  113. return serializer.Serialize(rows);
  114. }
  115. /// <summary>
  116. /// 根据jqgrid的查询操作符和字段拼接sql语句
  117. /// </summary>
  118. /// <param name="op">jqgrid的查询操作符</param>
  119. /// <returns>sql wehere语句</returns>
  120. /// <param name="field">查询字段名称</param>
  121. private string GetSQLOperater(string op, string field)
  122. {
  123. string s = string.Empty;
  124. switch (op)
  125. {
  126. case "eq": return field + " = @" + field;//等于
  127. case "ne": return field + " <> @" + field;//不等于
  128. case "bw": return field + " like @" + field + "'%'"; //开始于
  129. case "bn": return field + " not like @" + field + "'%'"; //不开始于
  130. case "ew": return field + " like '%' + @" + field; //结束于
  131. case "en": return field + " not like '%' + @" + field; //不结束于
  132. case "cn": return field + " like + '%' + " + field + "'%'"; //包含
  133. case "nc": return field + " not like + '%' + @" + field + "'%'"; //不包

  134. case "nu": return "(" + field + " = '' or is null)"; //空值
  135. case "nn": return "(" + field + " <> '' or is not null)"; //非空值
  136. case "in": return ""; //属于
  137. case "ni": return ""; //不属于
  138. default: return "";
  139. }
  140. }
  141. private DataTable SearchUsersDT(string filters)
  142. {
  143. string jsonRes = string.Empty;
  144. System.Runtime.Serialization.Json.DataContractJsonSerializer json = new
  145. System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(GridSearch));
  146. using (MemoryStream stream = new
  147. MemoryStream(System.Text.Encoding.UTF8.GetBytes(filters)))
  148. {
  149. GridSearch gridSearch = (GridSearch)json.ReadObject(stream);
  150. string groupOp = gridSearch.groupOp;
  151. List<GridSearchRules> Rules = gridSearch.rules;
  152. string sql = "select UserId, UserCode, Password FROM T_User";
  153. MySqlParameter[] paras = new MySqlParameter[Rules.Count];
  154. bool bFirst = true;
  155. for (int i = ; i < Rules.Count; i++)
  156. {
  157. GridSearchRules r = Rules[i];
  158. string field = r.field;
  159. string op = r.op;
  160. string data = r.data;
  161. sql = bFirst ? sql + " where " + GetSQLOperater(op, field) : sql +
  162. groupOp + GetSQLOperater(op, field);
  163. paras[i] = new MySqlParameter("@" + field, data);
  164. }
  165. SQLHelper sqlhelper = new SQLHelper();
  166. DataTable dt = sqlhelper.Selectinfo(sql);
  167. return dt;
  168. }
  169. }
  170. private bool DeleteUser(string userId)
  171. {
  172. bool flag = true;
  173. string[] idlist = userId.Split(',');
  174. foreach (var sid in idlist)
  175. {
  176. string sql = "DELETE FROM T_User WHERE UserId=" + userId;
  177. SQLHelper sqlhelper = new SQLHelper();
  178. flag = sqlhelper.AddDelUpdate(sql) > ;
  179. }
  180. return flag;
  181. }
  182. private bool AddUser(User objuser)
  183. {
  184. bool flag = false;
  185. string cmdText = "INSERT INTO T_User (UserCode,Password) VALUES ('" +
  186. objuser.UserCode + "','" + objuser.Password + "')";
  187. try
  188. {
  189. SQLHelper sqlhelper = new SQLHelper();
  190. flag = sqlhelper.AddDelUpdate(cmdText) > ;
  191. }
  192. catch (Exception ex)
  193. {
  194. throw ex;
  195. }
  196. return flag;
  197. }
  198. /// <summary>
  199. /// 更新用户信息
  200. /// </summary>
  201. /// <param name="objuser"></param>
  202. /// <returns>更新成功与否</returns>
  203. private bool UpdateUser(User objuser)
  204. {
  205. string sql = "UPDATE T_User SET UserCode = '" + objuser.UserCode +
  206. "',Password = '" + objuser.Password + "' WHERE UserId=" + objuser.UserId;
  207. SQLHelper sqlhelper = new SQLHelper();
  208. return sqlhelper.AddDelUpdate(sql) > ;
  209. }
  210. private DataTable GetUserDTSorted(string field, string oper)
  211. {
  212. string cmdText = "SELECT UserId, UserCode, UserName, Password, RoleId,
  213. CreateBy, CreateTime FROM T_User order by " + field + " " + oper;
  214. SQLHelper sqlhelper = new SQLHelper();
  215. DataTable dt = sqlhelper.Selectinfo(cmdText);
  216. return dt;
  217. }
  218. private bool CheckUserExist(string UserCode, string UserId)
  219. {
  220. string sql = "select * from T_User where UserCode = '" + UserCode + "' and
  221. UserId <> " + UserId;
  222. SQLHelper sqlhelper = new SQLHelper();
  223. DataTable dt = sqlhelper.Selectinfo(sql);
  224. return dt == null || (dt != null && dt.Rows.Count == );
  225. }
  226. }

10.前端的全部代码

  1. <html xmlns="http://www.w3.org/1999/xhtml">
  2. <head runat="server">
  3. <script src="JQGrid/jquery-1.11.1.min.js"></script>
  4. <link href="JQGrid/jquery-ui-1.11.1.custom/jquery-ui.css" rel="stylesheet" />
  5. <script src="JQGrid/grid.locale-cn.js"></script>
  6. <script src="JQGrid/jquery.jqGrid.js"></script>
  7. <link href="JQGrid/ui.jqgrid.css" rel="stylesheet" />
  8. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  9. <title></title>
  10. </head>
  11. <script type="text/javascript">
  12. jQuery(function ($) {
  13. var grid_selector = "#grid-table";
  14. var pager_selector = "#grid-pager";
  15. jQuery(grid_selector).jqGrid({
  16. url: "WebService/UserHandler.ashx",
  17. datatype: "json",
  18. height: 390,
  19. colNames: [' ', 'Id', '用户名', '密码'],
  20. colModel: [
  21. {
  22. name: 'myac', index: '', width: 80, fixed: true, sortable:
  23. false, resize: false,
  24. formatter: 'actions',
  25. formatoptions: {
  26. keys: true,
  27. //editbutton: true,
  28. editformbutton: true,
  29. // extraparam: { oper: 'edit' },
  30. editOptions: { //编辑操作,这个很重要,实现编辑时传送参数
  31. 什么的。
  32. reloadAfterSubmit: true,
  33. //editData: {
  34. // editkey: function () {
  35. // var sel_id =
  36. $(grid_selector).jqGrid('getGridParam', 'selrow');
  37. // var value = $(grid_selector).jqGrid('getCell',
  38. sel_id, 'UserId');
  39. // return value;
  40. // }
  41. //},
  42. closeAfterEdit: true,
  43. afterSubmit: function (response, postdata) {
  44. if (response.responseText != "") {
  45. alert(response.responseText);
  46. $(this).jqGrid('setGridParam', { datatype:
  47. 'json' }).trigger('reloadGrid');
  48. return [true, response.responseText]
  49. }
  50. },
  51. },
  52. delOptions: { //删除操作,这个很重要,实现删除时传送参数什
  53. 么的。 这处网上没有例子的。
  54. reloadAfterSubmit: true,
  55. delData: {
  56. delId: function () {
  57. var sel_id =
  58. $(grid_selector).jqGrid('getGridParam', 'selrow');
  59. var value = $(grid_selector).jqGrid('getCell',
  60. sel_id, 'UserId');
  61. return value;
  62. }
  63. },
  64. afterSubmit: function (response, postdata) {
  65. if (response.responseText != "") {
  66. alert(response.responseText);
  67. $(this).jqGrid('setGridParam', { datatype:
  68. 'json' }).trigger('reloadGrid');
  69. return [true, response.responseText]
  70. }
  71. }
  72. },
  73. }
  74. },
  75. { name: 'UserId', index: 'UserId', width: 60, sorttype: "int",
  76. editable: true, hidden: true },
  77. { name: 'UserCode', index: 'UserCode', width: 90, editable: true,
  78. editrules: { required: true } },
  79. { name: 'Password', index: 'Password', type: "password", width: 120,
  80. editable: true, editrules: { required: true } },
  81. ],
  82. viewrecords: true,
  83. rowNum: 10,
  84. rowList: [10, 20, 30],
  85. pager: pager_selector,
  86. altRows: true,
  87. multiselect: true,
  88. multiboxonly: true,
  89. loadonce: true, //设置这个才会分页
  90. loadComplete: function (xhr) {
  91. },
  92. editurl: "WebService/UserHandler.ashx",
  93. caption: "用户管理", //"User Information Management"
  94. autowidth: true
  95. });
  96. //enable search/filter toolbar
  97. //jQuery(grid_selector).jqGrid('filterToolbar',{defaultSearch:true,stringResult:true})
  98. //switch element when editing inline
  99. function aceSwitch(cellvalue, options, cell) {
  100. setTimeout(function () {
  101. $(cell).find('input[type=checkbox]')
  102. .wrap('<label class="inline" />')
  103. .addClass('ace ace-switch ace-switch-5')
  104. .after('<span class="lbl"></span>');
  105. }, 0);
  106. }
  107. //enable datepicker
  108. function pickDate(cellvalue, options, cell) {
  109. setTimeout(function () {
  110. $(cell).find('input[type=text]')
  111. .datepicker({ format: 'yyyy-mm-dd', autoclose: true });
  112. }, 0);
  113. }
  114. //navButtons
  115. jQuery(grid_selector).jqGrid('navGrid', pager_selector,
  116. { //navbar options
  117. edit: true,
  118. editicon: 'ui-icon-pencil blue',
  119. edittext: '编辑',
  120. add: true,
  121. addicon: 'ui-icon-circle-plus',
  122. addtext: '新增',
  123. del: true,
  124. delicon: 'ui-icon-circle-close red',
  125. deltext: '删除',
  126. search: true,
  127. searchicon: 'ui-icon-search orange',
  128. searchtext: '查找',
  129. refresh: true,
  130. refreshicon: 'ui-icon-refresh green',
  131. refreshtext: '刷新',
  132. view: true,
  133. viewicon: 'ui-icon-circle-zoomin grey',
  134. viewtext: '查看',
  135. },
  136. {
  137. //edit record form
  138. closeAfterEdit: true,
  139. recreateForm: true,
  140. beforeShowForm: function (e) {
  141. var form = $(e[0]);
  142. form.closest('.ui-jqdialog').find('.ui-jqdialogtitlebar').
  143. wrapInner('<div class="widget-header" />')
  144. style_edit_form(form);
  145. },
  146. afterSubmit: function (response, postdata) {
  147. if (response.responseText != "") {
  148. $(this).jqGrid('setGridParam', { datatype: 'json'
  149. }).trigger('reloadGrid');
  150. alert(response.responseText);
  151. return [true, response.responseText]
  152. }
  153. }
  154. },
  155. {
  156. //new record form
  157. closeAfterAdd: true,
  158. recreateForm: true,
  159. viewPagerButtons: false,
  160. beforeShowForm: function (e) {
  161. var form = $(e[0]);
  162. form.closest('.ui-jqdialog').find('.ui-jqdialogtitlebar').
  163. wrapInner('<div class="widget-header" />')
  164. style_edit_form(form);
  165. },
  166. afterSubmit: function (response, postdata) {
  167. if (response.responseText != "") {
  168. $(this).jqGrid('setGridParam', { datatype: 'json'
  169. }).trigger('reloadGrid');
  170. alert(response.responseText);
  171. return [true, response.responseText]
  172. }
  173. }
  174. },
  175. { //DELETE
  176. delData: {
  177. delId: function () {
  178. var sel_id = [];
  179. sel_id = $(grid_selector).jqGrid('getGridParam',
  180. 'selarrrow');
  181. var value = '';
  182. for (var i = 0; i < sel_id.length; i++) {
  183. value = value + ',' + $(grid_selector).jqGrid('getCell',
  184. sel_id[i], 'UserId');
  185. }
  186. if (value.charAt(0) == ',') {
  187. value = value.substr(1);
  188. }
  189. return value;
  190. }
  191. },
  192. closeOnEscape: true,
  193. closeAfterDelete: true,
  194. reloadAfterSubmit: true,
  195. closeOnEscape: true,
  196. drag: true,
  197. afterSubmit: function (response, postdata) {
  198. if (response.responseText != "") {
  199. alert(response.responseText);
  200. return [true, response.responseText]
  201. }
  202. }
  203. },
  204. {
  205. //search form
  206. closeOnEscape: true,
  207. closeAfterSearch: true,
  208. reloadAfterSubmit: true,
  209. recreateForm: true,
  210. afterShowSearch: function (e) {
  211. var form = $(e[0]);
  212. form.closest('.ui-jqdialog').find('.ui-jqdialogtitle').
  213. wrap('<div class="widget-header" />')
  214. style_search_form(form);
  215. },
  216. afterRedraw: function () {
  217. style_search_filters($(this));
  218. },
  219. afterSubmit: function (response, postdata) {
  220. if (response.responseText == "") {
  221. $(grid_selector).trigger("reloadGrid", [{ current: true }]);
  222. return [false, response.responseText]
  223. }
  224. else {
  225. $(this).jqGrid('setGridParam', { datatype: 'json'
  226. }).trigger('reloadGrid')
  227. return [true, response.responseText]
  228. }
  229. },
  230. multipleSearch: true
  231. },
  232. {
  233. //view record form
  234. recreateForm: true,
  235. beforeShowForm: function (e) {
  236. var form = $(e[0]);
  237. form.closest('.ui-jqdialog').find('.ui-jqdialogtitle').
  238. wrap('<div class="widget-header" />')
  239. }
  240. }
  241. )
  242. function style_edit_form(form) {
  243. //enable datepicker on "sdate" field and switches for "stock" field
  244. //form.find('input[name=sdate]').datepicker({ format: 'yyyy-mm-dd',
  245. autoclose: true })
  246. // .end().find('input[name=stock]')
  247. // .addClass('ace ace-switch ace-switch-5').wrap('<label
  248. class="inline" />').after('<span class="lbl"></span>');
  249. //update buttons classes
  250. var buttons = form.next().find('.EditButton .fm-button');
  251. buttons.addClass('btn btn-sm').find('[class*="-icon"]').remove();//uiicon,
  252. s-icon
  253. buttons.eq(0).addClass('btn-primary').prepend('<i class="iconok"></
  254. i>');
  255. buttons.eq(1).prepend('<i class="icon-remove"></i>')
  256. buttons = form.next().find('.navButton a');
  257. buttons.find('.ui-icon').remove();
  258. buttons.eq(0).append('<i class="icon-chevron-left"></i>');
  259. buttons.eq(1).append('<i class="icon-chevron-right"></i>');
  260. }
  261. function style_delete_form(form) {
  262. var buttons = form.next().find('.EditButton .fm-button');
  263. buttons.addClass('btn btn-sm').find('[class*="-icon"]').remove();//uiicon,
  264. s-icon
  265. buttons.eq(0).addClass('btn-danger').prepend('<i class="icontrash"></
  266. i>');
  267. buttons.eq(1).prepend('<i class="icon-remove"></i>')
  268. }
  269. function style_search_filters(form) {
  270. form.find('.delete-rule').val('X');
  271. form.find('.add-rule').addClass('btn btn-xs btn-primary');
  272. form.find('.add-group').addClass('btn btn-xs btn-success');
  273. form.find('.delete-group').addClass('btn btn-xs btn-danger');
  274. }
  275. function style_search_form(form) {
  276. var dialog = form.closest('.ui-jqdialog');
  277. var buttons = dialog.find('.EditTable')
  278. buttons.find('.EditButton a[id*="_reset"]').addClass('btn btn-sm btninfo').
  279. find('.ui-icon').attr('class', 'icon-retweet');
  280. buttons.find('.EditButton a[id*="_query"]').addClass('btn btn-sm btninverse').
  281. find('.ui-icon').attr('class', 'icon-comment-alt');
  282. buttons.find('.EditButton a[id*="_search"]').addClass('btn btn-sm btnpurple').
  283. find('.ui-icon').attr('class', 'icon-search');
  284. }
  285. function beforeDeleteCallback(e) {
  286. var form = $(e[0]);
  287. if (form.data('styled')) return false;
  288. form.closest('.ui-jqdialog').find('.ui-jqdialogtitlebar').
  289. wrapInner('<div class="widget-header" />')
  290. style_delete_form(form);
  291. form.data('styled', true);
  292. }
  293. function beforeEditCallback(e) {
  294. var form = $(e[0]);
  295. form.closest('.ui-jqdialog').find('.ui-jqdialogtitlebar').
  296. wrapInner('<div class="widget-header" />')
  297. style_edit_form(form);
  298. }
  299. //it causes some flicker when reloading or navigating grid
  300. //it may be possible to have some custom formatter to do this as the grid
  301. is being created to prevent this
  302. //or go back to default browser checkbox styles for the grid
  303. function styleCheckbox(table) {
  304. /**
  305. $(table).find('input:checkbox').addClass('ace')
  306. .wrap('<label />')
  307. .after('<span class="lbl align-top" />')
  308. $('.ui-jqgrid-labels th[id*="_cb"]:first-child')
  309. .find('input.cbox[type=checkbox]').addClass('ace')
  310. .wrap('<label />').after('<span class="lbl align-top" />');
  311. */
  312. }
  313. //unlike navButtons icons, action icons in rows seem to be hard-coded
  314. //you can change them like this in here if you want
  315. function updateActionIcons(table) {
  316. /**
  317. var replacement =
  318. {
  319. 'ui-icon-pencil' : 'icon-pencil blue',
  320. 'ui-icon-trash' : 'icon-trash red',
  321. 'ui-icon-disk' : 'icon-ok green',
  322. 'ui-icon-cancel' : 'icon-remove red'
  323. };
  324. $(table).find('.ui-pg-div span.ui-icon').each(function(){
  325. var icon = $(this);
  326. var $class = $.trim(icon.attr('class').replace('ui-icon', ''));
  327. if($class in replacement) icon.attr('class', 'ui-icon
  328. '+replacement[$class]);
  329. })
  330. */
  331. }
  332. //replace icons with FontAwesome icons like above
  333. function updatePagerIcons(table) {
  334. var replacement =
  335. {
  336. 'ui-icon-seek-first': 'icon-double-angle-left bigger-140',
  337. 'ui-icon-seek-prev': 'icon-angle-left bigger-140',
  338. 'ui-icon-seek-next': 'icon-angle-right bigger-140',
  339. 'ui-icon-seek-end': 'icon-double-angle-right bigger-140'
  340. };
  341. $('.ui-pg-table:not(.navtable) > tbody > tr > .ui-pg-button > .uiicon').
  342. each(function () {
  343. var icon = $(this);
  344. var $class = $.trim(icon.attr('class').replace('ui-icon', ''));
  345. if ($class in replacement) icon.attr('class', 'ui-icon ' +
  346. replacement[$class]);
  347. })
  348. }
  349. function enableTooltips(table) {
  350. $('.navtable .ui-pg-button').tooltip({ container: 'body' });
  351. $(table).find('.ui-pg-div').tooltip({ container: 'body' });
  352. }
  353. //var selr = jQuery(grid_selector).jqGrid('getGridParam','selrow');
  354. });
  355. </script>
  356. <body>
  357. <form id="form1" runat="server">
  358. <div>
  359. <table id="grid-table"></table>
  360. <div id="grid-pager"></div>
  361. </div>
  362. </form>
  363. </body>
  364. </html>

Web jquery表格组件 JQGrid 的使用 - 全部代码的更多相关文章

  1. Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引

    因为内容比较多,所以每篇讲解一些内容,最后会放出全部代码,可以参考.操作中总会遇到各式各样的问题,个人对部分问题的研究在最后一篇 问题研究 里.欢迎大家探讨学习. 代码都经过个人测试,但仍可能有各种未 ...

  2. Web jquery表格组件 JQGrid 的使用 - 11.问题研究

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  3. Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数、ColModel API、事件及方法

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  4. Web jquery表格组件 JQGrid 的使用 - 5.Pager翻页、搜索、格式化、自定义按钮

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  5. Web jquery表格组件 JQGrid 的使用 - 6.准备工作 & Hello JQGrid

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  6. Web jquery表格组件 JQGrid 的使用 - 7.查询数据、编辑数据、删除数据

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  7. Web jquery表格组件 JQGrid 的使用 - 8.Pager、新增数据、查询、刷新、查看数据

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  8. 打通前后端全栈开发node+vue进阶【课程学习系统项目实战详细讲解】(3):用户添加/修改/删除 vue表格组件 vue分页组件

    第三章 建议学习时间8小时      总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章] 演示地址:后台:demo ...

  9. 扩展HT for Web之HTML5表格组件的Renderer和Editor

    在HT for Web提供了一下几种常用的Editor,分别是: slider:拉条 color picker:颜色选择器 enum:枚举类型 boolean:真假编辑器 string:普通的文本编辑 ...

随机推荐

  1. fetch_20newsgroups 数据集导入失败: no handlers could be fetch_20newsgroups

    最简单的办法 下载'20news-bydate.pkz', 放到C:\\Users\[Current user]\scikit_learn_data 下边就行. 实际上 scikit learning ...

  2. 穿越之旅之--android中如何执行java命令

    android的程序基于java开发,当我们接上调试器,执行adb shell,就可以执行linux命令,但是却并不能执行java命令. 那么在android的shell中是否就不能执行java程序了 ...

  3. Python简单爬虫入门一

    为大家介绍一个简单的爬虫工具BeautifulSoup BeautifulSoup拥有强大的解析网页及查找元素的功能本次测试环境为python3.4(由于python2.7编码格式问题) 此工具在搜索 ...

  4. 理解 Cinder 架构 - 每天5分钟玩转 OpenStack(45)

    从本节开始我们学习 OpenStack 的 Block Storage Service,Cinder 理解 Block Storage 操作系统获得存储空间的方式一般有两种: 通过某种协议(SAS,S ...

  5. 网络抓包工具-Wireshark学习资料

    wireshark一个非常牛逼的网络抓包工具.转载一系列博文 一站式学习Wireshark(一):Wireshark基本用法 一站式学习Wireshark(二):应用Wireshark观察基本网络协议 ...

  6. sql server 2012 数据引擎任务调度算法解析(下)

    上次我们说到,sql server 2012的企业版的任务调度流程,一直到给新连接分配了scheduler,都是与以前的版本算法是一致的,只有在进行任务分配的时候,算法才有了细微的调整. 新算法的目的 ...

  7. Useful commmands in Gentoo

    Safe way to upgrade: emerge --sync & eix-sync emerge -avuDN --with-bdeps y --keep-going world et ...

  8. hammer.js的六大事件

    1.Pan事件:在指定的dom区域内,一个手指放下并移动事件,即触屏中的拖动事件.这个事件在触屏开发中比较常用: Panstart 拖动开始 Panmove 拖动过程 Panend 拖动结束 Panc ...

  9. SSTABLE简介

    SSTABLE数据组织:http://blog.csdn.net/tankles/article/details/7663905

  10. Let it go.Let it be.Keep it up!

    第三份工作仅仅持续了三个月,今天是last day. 虽然时间很短,但也是经历一场,认识了一些人,知道了一些事. 来去匆匆,难免有一点遗憾,还有一点愧疚. 只能放下,顺其自然,继续努力!