上次解释了几个易犯错的地方,当然对于大神们那都是小菜一碟了,今天来说说后台请求数据,分页,返回json数据

废话不多说献上代码

    private string QueryList(ArrayList arrayList)
{
//ArrayList ret = new ArrayList();
string order = this.Request.Form["order"];
string sort = this.Request.Form["sort"];
string rows = this.Request.Form["rows"];
string page = this.Request.Form["page"];
//page=1&rows=10&sort=UserName&order=desc
int iSortIndex, iPage, iRows;
string[] colums = new string[] { "moveid", "daytime", "outsite", "insite", "inputman", "handleman", "outdate", "outid", "availability", "invaliddate", "status", "preconcert", "checked", "chkdate", "fin_checked", "remark", "used", "deleted"};
//if (!int.TryParse(sidx, out iSortIndex))
//{
// iSortIndex = -1;
//}
iSortIndex = ;
if (!int.TryParse(page, out iPage))
{
iPage = ;
}
if (!int.TryParse(rows, out iRows) || iRows > || iRows <= )
{
iRows = ;
}
int total = ;
//传入表名
JGDataQuery gq = new JGDataQuery("move");
//传入搜索条件
if (!string.IsNullOrEmpty(Request.Form["IdOrName"]))
{
if (Erp.Common.Verify.IsNumber(Request.Form["IdOrName"]))
{
gq.AddQueryParam("moveid", Request.Form["IdOrName"]);
}
}
      
DataTable dt = gq.GetListByPage(colums, iPage, iRows, , sort,out total);
     //返回json
return Erp.Common.ToEasyJson.TableToJson(dt,total); }

上面查询数据是封装了一个类,包括查询条件和数据分页sql,当然用存储过程是最好,最快的啦,但是系统关联表太多,为了不麻烦的频繁改,就拼sql啦,为了扩展方便嘛,偷偷懒

public class JGDataQuery
{ public string TableName { get; private set; }
string sqlWhere;
List<SqlParameter> sqlParaList = new List<SqlParameter>();
public JGDataQuery(string tableName)
{
//
//TODO: 在此处添加构造函数逻辑
//
if (string.IsNullOrEmpty(tableName))
{
throw new NullReferenceException("表名不能为空;");
}
TableName = tableName;
} public void AddQueryParam(string name, object paramValue)
{
sqlWhere += " and " + name + "=@" + name;
sqlParaList.Add(new SqlParameter(name, paramValue));
}
/// <summary>
/// 同一列值多值
/// </summary>
/// <param name="columnName"></param>
/// <param name="key"></param>
/// <param name="keyValue"></param>
public void AddInParams(string columnName, List<string> listParams)
{
sqlWhere += " and " + columnName + " in (";
foreach (string item in listParams)
{
sqlWhere += item + ',';
} if (sqlWhere.Length > )
{
sqlWhere = sqlWhere.Remove(sqlWhere.LastIndexOf(','), );
}
sqlWhere += " ) ";
}
public void AddLikeQueryParam(string name, object paramValue)
{
sqlWhere += " and " + name + " like '%@" + name + "%' ";
sqlParaList.Add(new SqlParameter(name, paramValue));
}
public void AddLetterThanParm(string name, object paramValue)
{
sqlWhere += " and " + name + "<@" + name;
sqlParaList.Add(new SqlParameter(name, paramValue));
}
public void AddGreaterThanParm(string name, object paramValue)
{
sqlWhere += " and " + name + ">@" + name;
sqlParaList.Add(new SqlParameter(name, paramValue));
}
public void AddNoEqualParam(string name, object paramValue)
{
sqlWhere += name + "<>@" + name + " and ";
sqlParaList.Add(new SqlParameter(name, paramValue));
}
public void AddBetweenQueryParam(string starttime, string endtime, object paramValue1, object paramValue2)
{
sqlWhere += " and " + starttime + " < @" + starttime;
sqlWhere += " and " + endtime + "< @" + endtime;
sqlParaList.Add(new SqlParameter(starttime, paramValue1));
sqlParaList.Add(new SqlParameter(endtime, paramValue2));
}
/// <summary>
/// Or条件查询
/// </summary>
string sqlOrWhere = string.Empty;
public void AddlikeOrParam(string name, object paramValue)
{
//sqlOrWhere += name + " like @" + name + " or ";
//sqlParaList.Add(new SqlParameter(name, " '%" + paramValue + "%' ")); sqlOrWhere += name + " like '%" + paramValue + "%' or ";
sqlParaList.Add(new SqlParameter(name, " '%" + paramValue + "%' "));
}
/// <summary>
/// 分页获取数据列表
/// </summary>
/// <param name="columns">需要查询的列明数组</param>
/// <param name="page">当前页</param>
/// <param name="pageSize">页码</param>
/// <param name="sortIndex">排序索引</param>
/// <param name="sortDirction">排序升降</param>
/// <returns></returns>
public DataTable GetListByPage(string[] columns, int page, int pageSize, int sortIndex, string sortDirction, out int total)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("SELECT ");
if (columns == null || columns.Length == )
strSql.Append(" * ");
else
{
for (int i = ; i < columns.Length; i++)
{
strSql.Append(columns[i] + ",");
}
strSql.Remove(strSql.Length - , );
}
strSql.Append(" FROM ( ");
strSql.Append(" SELECT ROW_NUMBER() OVER ("); if (sortIndex >= && sortIndex < columns.Length - )
{
strSql.Append(" order by T." + columns[sortIndex]);
if (sortDirction != null && (sortDirction == "asc" || sortDirction == "desc"))
{
strSql.Append(" " + sortDirction);
}
} strSql.Append(")AS Row, T.* from " + TableName + " T ");
if (sqlParaList != null && sqlParaList.Count > )
{
strSql.Append(" where 1=1");
if (!string.IsNullOrEmpty(sqlWhere))
{
strSql.Append(sqlWhere.TrimEnd(','));
}
if (!string.IsNullOrEmpty(sqlOrWhere))
{
strSql.Append(" and ( " + sqlOrWhere.Substring(, sqlOrWhere.Length - ) + " )");
}
}
strSql.Append(" ) TT");
strSql.AppendFormat(" WHERE TT.Row between {0} and {1}", (pageSize * (page - ) + ), pageSize * page);
//获取列表总行数
total = GetListCount(pageSize);
return SqlHelper.ExecuteDataTable(SqlHelper.SHOP_CONN_STR, CommandType.Text, strSql.ToString(), sqlParaList.ToArray());
}
/// <summary>
/// 获取列表总行数
/// </summary>
/// <returns></returns>
public int GetListCount(int pageSize)
{ StringBuilder strSql = new StringBuilder("select count(1)" + " from " + TableName);
if (sqlParaList != null && sqlParaList.Count > )
{
strSql.Append(" where 1=1");
if (!string.IsNullOrEmpty(sqlWhere))
{
strSql.Append(sqlWhere.TrimEnd(','));
}
if (!string.IsNullOrEmpty(sqlOrWhere))
{
strSql.Append(" and (" + sqlOrWhere.Substring(, sqlOrWhere.Length - ) + ")");
}
}
object obj = SqlHelper.ExecuteScalar(SqlHelper.SHOP_CONN_STR, CommandType.Text, strSql.ToString(), sqlParaList.ToArray());
int RowsCount = ;
if (obj != null)
{
return RowsCount = (int)obj;
}
else
{
return ;
}
//int total = 0;
// //if (RowsCount % pageSize == 0)
// //{
// // total = RowsCount / pageSize;
// //}
// //else
// //{
// // total = RowsCount / pageSize + 1;
// //}
// return total;
}

拼接json的方法

      public static string TableToJson(DataTable table,int total)
{
if (table == null)
return "";
StringBuilder sb = new StringBuilder();
sb.Append("{");
sb.Append("\"total\":" + total + ",");
sb.Append("\"rows\":[");
foreach (DataRow row in table.Rows)
{
sb.Append("{");
foreach (DataColumn col in table.Columns)
{
sb.Append("\"" + col.ColumnName + "\":\"" + row[col.ColumnName] + "\",");
}
sb.Remove(sb.Length - , );
sb.Append("},");
}
sb.Remove(sb.Length - , );
sb.Append("]");
sb.Append("}");
return sb.ToString();
}

jquery.easyui使用详解,和遇到的问题,提供大家在使用的时候少走弯路(二)的更多相关文章

  1. jquery.easyui代码详解,和遇到的问题,提供大家在使用的时候少走弯路(一)

    初次使用jquery.easyui这个东东,虽然简单,但还是很费力的去研究了一下使用,在使用过程中遇到的问题,下面代码会详细的注释到 引用的文件jquery.min.js              j ...

  2. jquery的css详解(二)

    jq的工具方法style用于设置样式,jq的实例方法css在设置样式时就是调用的它,接下来分析一下源码. jQuery.extend({ ............................ st ...

  3. jQuery.attr() 函数详解

    一,jQuery.attr()  函数详解: http://www.365mini.com/page/jquery-attr.htm 二,jQuery函数attr()和prop()的区别: http: ...

  4. jQuery 事件用法详解

    jQuery 事件用法详解 目录 简介 实现原理 事件操作 绑定事件 解除事件 触发事件 事件委托 事件操作进阶 阻止默认事件 阻止事件传播 阻止事件向后执行 命名空间 自定义事件 事件队列 jque ...

  5. jQuery.ready() 函数详解

    jQuery.ready() 函数详解 ready()函数用于在当前文档结构载入完毕后立即执行指定的函数. 该函数的作用相当于window.onload事件. 你可以多次调用该函数,从而绑定多个函数, ...

  6. jquery inArray()函数详解

    jquery inarray()函数详解 jquery.inarray(value,array)确定第一个参数在数组中的位置(如果没有找到则返回 -1 ). determine the index o ...

  7. jQuery extend方法详解

    先说个概念的东西: jQuery为开发插件提拱了两个方法,分别是: $.fn.extend(item):为每一个实例添加一个实例方法item.($("#btn1") 会生成一个 j ...

  8. jQuery的观察者模式详解 转载

    jQuery的观察者模式详解 投稿:hebedich 本文主要是介绍了jQuery中on方法及trigger方法,以及围绕这个方法来体验的观察者模式,是篇非常不错的文章,对我们理解观察者模式很有帮助. ...

  9. 【转载】jQuery.extend 函数详解

    转载自:http://www.cnblogs.com/RascallySnake/archive/2010/05/07/1729563.html jQuery.extend 函数详解 JQuery的e ...

随机推荐

  1. 需要不断学习的编程知识库list

    1.重构思想: 2.回调思想: 3.封装思想: 4.模块化思想: 5.复用思想: 6.C++的面向对象思想:  -----后续

  2. iOS UIView上添加mp4视频

    ViewController.h文件中添加如下代码: #import <MediaPlayer/MediaPlayer.h> @property(nonatomic,retain) MPM ...

  3. Spring4.1新特性——Spring缓存框架增强(转)

    目录 Spring4.1新特性——综述 Spring4.1新特性——Spring核心部分及其他 Spring4.1新特性——Spring缓存框架增强 Spring4.1新特性——异步调用和事件机制的异 ...

  4. WinPipe后门程序代码示例(仅限技术交流)

    具体怎么编译,生成执行程序,不懂得先学习C++程序代码编译和集成开发环境. 多的不说了,只有两个代码文件,一个头文件,一个源文件.不多说了,直接上干货. (恶意使用,或者商用,后果自负,与本人无关.) ...

  5. pthreads 2.0.10 test

    CentOS 6.3 cd /root mkdir pthreads //get php-5.6 and install zts version wget cn2.php.net/get/php-5. ...

  6. mongo virtual

    var options={"upsert":false,"multi":false,'new':false}; 不存是否插入,更新是否批量,返回内容是更新前还是 ...

  7. A、B、C、D和E类IP地址

    IP地址分为A,B,C,D,E五类. 网络号:用于识别主机所在的网络:主机号:用于识别该网络中的主机. 其中A类分配给政府机关使用,B类地址给大中型企业使用,C类地址给个人使用.这三种是主要的. IP ...

  8. low-rank 的相关求解方法 (CODE) Low-Rank Matrix Recovery and Completion via Convex Optimization

    (CODE) Low-Rank Matrix Recovery and Completion via Convex Optimization 这个是来自http://blog.sina.com.cn/ ...

  9. C++虚函数的陷阱

    首先看一段代码: class B { public: ) { std::cout << "base fun called, " << i; }; }; cl ...

  10. ubuntu方块乱码

    更改下环境变量/etc/default/locale LANG="en_US.UTF-8"LANGUAGE="en_US:en"