前言
用asp.net结合easyui做个一个数据网格的页面,包括对数据的增删改查,界面如下:
 一、UI界面
先写UI界面,代码如下,记得引入相关js和css文件
  1. <body>
  2. <table id="tb1"></table>
  3. <div id="tb" style="padding:5px">
  4. <div style="margin-bottom:5px">
  5. <a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-reload'" onclick="reload()">刷新</a>
  6. <a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-add'" onclick="Add()">添加</a>
  7. <a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-edit'" onclick="edit()">修改</a>
  8. <a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-remove'" onclick="destroy()">删除</a>
  9. </div>
  10. <div>
  11. 查询名称:<input type="text" id="Eq" name="Eq" style="width:150px"/>
  12. <select id="order" class="easyui-combobox" style="width:100px">
  13. <option value="asc">升序</option>
  14. <option value="desc">降序</option>
  15. </select>
  16. <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-search'" onclick="obj.search()">查询</a>
  17. </div>
  18. </div>
  19. <%-- 弹窗 Start--%>
  20. <div id="dlg" class="easyui-dialog" style="width:400px;height:320px;padding:10px 20px" data-options="closed:true,buttons:'#dlg-buttons'">
  21. <div class="ftitle">设备信息</div>
  22. <form id="fm" method="post" novalidate="novalidate">
  23. <div class="fitem">
  24. <label>产品编号:</label>
  25. <input id="ProductID" name="ProductID" class="easyui-validatebox" data-options="required:false"/>
  26. </div>
  27. <div class="fitem">
  28. <label>产品名称:</label>
  29. <input id="Name" name="Name" class="easyui-validatebox" data-options="required:true"/>
  30. </div>
  31. <div class="fitem">
  32. <label>描述:</label>
  33. <input id="Description" name="Description" class="easyui-validatebox" data-options="required:true"/>
  34. </div>
  35. <div class="fitem">
  36. <label>种类:</label>
  37. <input id="Category" name="Category" class="easyui-validatebox" data-options="required:true"/>
  38. </div>
  39. <div class="fitem">
  40. <label>价格:</label>
  41. <input id="Price" name="Price" class="easyui-validatebox" data-options="required:true,validType:'intOrFloat'"/>
  42. </div>
  43. </form>
  44. </div>
  45. <div id="dlg-buttons">
  46. <a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-ok'" onclick="save()" style="width:90px">Save</a>
  47. <a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" onclick="javascript:$('#dlg').dialog('close')" style="width:90px">Cancel</a>
  48. </div>
  49. <%-- 弹窗 End --%>
  50. </body>
二、JS加载
关于datagrid的加载,我用js,要记住列名要和数据源对应
  1. $(function () {
  2. $('#tb1').datagrid({
  3. url: '../Handler/GetDataFormSql.ashx',
  4. width: 1200,
  5. title: '管理',
  6. method: 'get',
  7. toolbar: '#tb',
  8. //rownumbers: true,
  9. singleSelect:true,
  10. columns: [[
  11. { field: 'ProductID', title: '编号', width: 150 },
  12. { field: 'Name', title: '名称', width: 150 },
  13. { field: 'Description', title: '描述', width: 250 },
  14. { field: 'Category', title: '种类', width: 150 },
  15. { field: 'Price', title: '价格', width: 150 }
  16. ]],
  17. pagination: true,
  18. pageSize: 20,
  19. pageList: [20, 30 , 40]
  20. });
  21. })
三、一般处理程序
GetDataFormSql.ashx 文件内容:
  1. public void ProcessRequest(HttpContext context)
  2. {
  3. context.Response.ContentType = "text/plain";
  4. int page = 1, rows = 10;
  5. //EasyUI自带的两个参数rows与page ,表示当前页与行数
  6. if (context.Request.QueryString["rows"] != null)
  7. {
  8. rows = int.Parse(context.Request.QueryString["rows"].ToString().Trim());
  9. }
  10. if (context.Request.QueryString["page"] != null)
  11. {
  12. page = int.Parse(context.Request.QueryString["page"].ToString().Trim());
  13. }
  14. //查询分页 stratIndex endIndex
  15. int stratIndex, endIndex;
  16. stratIndex = (page - 1) * rows + 1;
  17. endIndex = page * rows;
  18. //查询排序 key order
  19. string key = "", order = "desc";
  20. if (context.Request.QueryString["key"] != null)
  21. {
  22. key = context.Request.QueryString["key"].ToString().Trim();
  23. }
  24. if (context.Request.QueryString["order"] != null)
  25. {
  26. order = context.Request.QueryString["order"].ToString().Trim();
  27. }
  28. //设置模糊查询
  29. StringBuilder sqlWhere = new StringBuilder();
  30. if (key != "") {
  31. sqlWhere.AppendFormat("upper(ProductID) like '%{0}%' or "+
  32. "upper(Name) like '%{0}%' or "+
  33. "upper(Description) like '%{0}%' or " +
  34. "upper(Category) like '%{0}%' or " +
  35. "upper(Price) like '%{0}%'",key);
  36. }
  37. //查询数据库
  38. DAL.SqlHelper sqlhelper = new DAL.SqlHelper();
  39. //获取查询数据的行数
  40. int count = sqlhelper.EUGetRecordCount(sqlWhere.ToString());
  41. //封装数据到dataset
  42. DataSet ds = sqlhelper.GetListByPagebykey(sqlWhere.ToString(), order, stratIndex, endIndex);
  43. //将dataset转化为Json格式
  44. string strToJon = DAL.ToJson.DatasetJson(ds, count);
  45. context.Response.Write(strToJon);
  46. context.Response.End();
  47. }
三、DAL数据访问层
接下来就是数据访问层SqlHelper的代码
  1. public int EUGetRecordCount(string key)
  2. {
  3. StringBuilder strSql = new StringBuilder();
  4. strSql.Append("select count(1) FROM Products ");
  5. if (key.Trim() != "")
  6. {
  7. strSql.Append("where " + key);
  8. }
  9. object obj = DBHelper.GetSingle(strSql.ToString());
  10. if (obj == null)
  11. {
  12. return 0;
  13. }
  14. else
  15. {
  16. return Convert.ToInt32(obj);
  17. }
  18. }
  19. public DataSet GetListByPagebykey(string Key, string order, int startIndex, int endIndex)
  20. {
  21. StringBuilder strSql = new StringBuilder();
  22. strSql.Append("SELECT * FROM ( ");
  23. strSql.Append(" SELECT ROW_NUMBER() OVER (");
  24. if (!string.IsNullOrEmpty(Key.Trim()))
  25. {
  26. strSql.Append("order by T." + Key+" " + order);
  27. }
  28. else
  29. {
  30. strSql.Append("order by T.ProductID asc");
  31. }
  32. strSql.Append(")AS Row, T.* from Products T ");
  33. if (!string.IsNullOrEmpty(Key.Trim()))
  34. {
  35. strSql.Append(" WHERE " + Key);
  36. }
  37. strSql.Append(" ) TT");
  38. strSql.AppendFormat(" WHERE TT.Row between {0} and {1}", startIndex, endIndex);
  39. return DBHelper.Query(strSql.ToString());
  40. }
四、辅助方法
还需要dataset转json的代码,其实这个可以从网上找到
  1. public class ToJson
  2. {
  3. /// <summary>
  4. /// DataSet转换成Json格式
  5. /// </summary>
  6. /// <param name="ds">DataSet</param>
  7. /// <returns></returns>
  8. public static string DatasetJson(DataSet ds, int total = -1)
  9. {
  10. StringBuilder json = new StringBuilder();
  11. foreach (DataTable dt in ds.Tables)
  12. {
  13. json.Append("{\"total\":");
  14. if (total == -1)
  15. {
  16. json.Append(dt.Rows.Count);
  17. }
  18. else
  19. {
  20. json.Append(total);
  21. }
  22. json.Append(",\"rows\":");
  23. json.Append(DataTableJson(dt));
  24. json.Append("]}");
  25. } return json.ToString();
  26. }
  27. private static string DataTableJson(DataTable dt)
  28. {
  29. StringBuilder jsonBuilder = new StringBuilder();
  30. jsonBuilder.Append("[");
  31. for (int i = 0; i < dt.Rows.Count; i++)
  32. {
  33. jsonBuilder.Append("{");
  34. for (int j = 0; j < dt.Columns.Count; j++)
  35. {
  36. jsonBuilder.Append("\"");
  37. jsonBuilder.Append(dt.Columns[j].ColumnName);
  38. jsonBuilder.Append("\":\"");
  39. jsonBuilder.Append(dt.Rows[i][j].ToString());
  40. jsonBuilder.Append("\",");
  41. }
  42. jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
  43. jsonBuilder.Append("},");
  44. }
  45. jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
  46. return jsonBuilder.ToString();
  47. }
  48. }
到这就大致实现了网格加载的功能,还剩四个增删改查的按钮功能,这里只列出增加数据的数据访问层代码,其中应用了SqlParameter参数化SQL,可以防止SQL注入
  1. public int Add(Products model)
  2. {
  3. StringBuilder strSql = new StringBuilder();
  4. strSql.Append("insert into Products(");
  5. strSql.Append("Name,Description,Category,Price)");
  6. strSql.Append(" values (");
  7. strSql.Append("@Name,@Description,@Category,@Price)");
  8. strSql.Append(";select @@IDENTITY");
  9. SqlParameter[] parameters = {
  10. new SqlParameter("@Name", SqlDbType.NVarChar,255),
  11. new SqlParameter("@Description", SqlDbType.NVarChar,255),
  12. new SqlParameter("@Category", SqlDbType.NVarChar,255),
  13. new SqlParameter("@Price ", SqlDbType.Decimal,255),
  14. };
  15. //parameters[0].Value = model.ProductID;
  16. parameters[0].Value = model.Name;
  17. parameters[1].Value = model.Description;
  18. parameters[2].Value = model.Category;
  19. parameters[3].Value = model.Price;
  20. object obj = DBHelper.GetSingle(strSql.ToString(), parameters);
  21. if (obj == null)
  22. {
  23. return 0;
  24. }
  25. else
  26. {
  27. return Convert.ToInt32(obj);
  28. }
  29. }

EasyUI笔记(六)数据表格的更多相关文章

  1. 第二百二十二节,jQuery EasyUI,DataGrid(数据表格)组件

    jQuery EasyUI,DataGrid(数据表格)组件 学习要点: 1.加载方式 2.分页功能 本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于 Pa ...

  2. 第二百二十四节,jQuery EasyUI,ComboGrid(数据表格下拉框)组件

    jQuery EasyUI,ComboGrid(数据表格下拉框)组件 学习要点: 1.加载方式 2.属性列表 3.方法列表 本节课重点了解 EasyUI 中 ComboGrid(数据表格下拉框)组件的 ...

  3. jQuery EasyUI/TopJUI实现数据表格的增删改查功能(不写js,纯HTML实现!!!)

    jQuery EasyUI/TopJUI实现数据表格的增删改查功能(不写js,纯HTML实现!!!) 废话不多说,直接贴上代码 <table id="configEdatagrid&q ...

  4. Jquery EasyUI datagrid后台数据表格生成及分页详解

    由于项目原因,网站后台需要对用户信息进行各种操作,有时还需要进行批量操作,所以首先需要将用户信息展示出来,查了不少资料.发现Jquery EasyUI确实是一个不错的选择,功能强大,文档也比较全面,而 ...

  5. (五)EasyUI使用——datagrid数据表格

    DataGrid以表格形式展示数据,并提供了丰富的选择.排序.分组和编辑数据的功能支持.DataGrid的设计用于缩短开发时间,并且使开发人员不需要具备特定的知识.它是轻量级的且功能丰富.单元格合并. ...

  6. DataGrid( 数据表格) 组件[9]

    本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination( ...

  7. DataGrid( 数据表格) 组件[8]

    本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination( ...

  8. DataGrid( 数据表格) 组件[7]

    本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination( ...

  9. DataGrid( 数据表格) 组件[6]

    本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination( ...

  10. DataGrid( 数据表格) 组件[5]

    本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination( ...

随机推荐

  1. 如何使用jmeter做一个功能的性能测试

    一.为什么又再次写类似的文章? 在博客园和公号写文章,已经快两年了,所以自然在公号和博客园都能联系到我的. 也就是几天前,有个人加我微信,对于总有人加我好友,我已经觉得不奇怪了,为什么呢? 加我好友的 ...

  2. OpenCV3入门1—环境搭建与实验

    1.环境搭建 1.1 VS2017开发环境搭建 1).下载软件包 https://opencv.org/ 2).配置环境变量 配置win10系统环境变量,把下面路径添加到path. D:\WORK\5 ...

  3. Dubbo学习系列之十七(微服务Soul网关)

    论起微服务,哪能不谈网关,老将有Zuul,后继有Gateway,但这些都和SpringCloud关系密切,其他网关如Kong,因Lua原因,玩起来略不顺手.这不,就来了个Soul,我顺便拿来整进了我在 ...

  4. 二、UDP

    1 端口号 在计算机网络和电磁信号理论中,对共享同一通信信道的多个信号进行区分是个常见的问题.多路复用(multiplexing)就是允许多个会话共享同一介质或机制的一种解决方案. 使用不同的频率来区 ...

  5. Solr搜索解析及查询解析器用法概述

    一.简介 大多数查询都使用 了标准的Solr语法.这种语法是Solr最常见的,由默认查询解析器负责处理.Solr的默认查询解析器是Lucene查询解析器[LuceneQParserPlugin类实现] ...

  6. Spring Boot集群管理工具KafkaAdminClient

    能与原理介绍 在Kafka官网中这么描述AdminClient:The AdminClient API supports managing and inspecting topics, brokers ...

  7. 基于MATLAB的单级倒立摆仿真

    有关代码及word文档请关注公众号“浮光倾云”,后台回复A010.02即可获取 一.单级倒立摆概述 倒立摆是处于倒置不稳定状态,人为控制使其处于动态平衡的一种摆,是一类典型的快速.多变量.非线性.强耦 ...

  8. 【Java并发工具类】Java并发容器

    前言 Java并发包有很大一部分都是关于并发容器的.Java在5.0版本之前线程安全的容器称之为同步容器.同步容器实现线程安全的方式:是将每个公有方法都使用synchronized修饰,保证每次只有一 ...

  9. mysql 查询指定数据库所有表, 指定表所有列, 指定列所有表 所有外键及索引, 以及索引的创建和删除

    查询指定 数据库 中所有 表 (指定数据库的,所有表) // 可以把 TABLE_NAME 换成 * 号, 查看更丰富的信息 SELECT TABLE_NAME FROM information_sc ...

  10. 【转载】python_logging模块

    原文:https://www.cnblogs.com/liujiacai/p/7804848.html 1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志 ...