Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)aaa
published in(发表于) 2013/12/15 8:52:54
客户端回调实现gridView无刷新分页_.net资料_编程技术

客户端回调实现gridView无刷新分页_.net资料_编程技术-你的首页-uuhomepage.com





由于客户对速度和性能上的要求越来越变态,而数据量一天天的庞大,因此本人产生了数据的查询和分页完全由客户端回调来实现。想法看上去复杂,实现起来也不难。废话不多说,看程序吧。




一、存储过程




包头:




create or replace package H_QUERYPACK is




-- Author : Evorul
-- Created : 2007-3-29
-- Purpose : 查询机构表

-- Public type declarations
type MYCURSOR is REF CURSOR;
PROCEDURE QUERYLOG (RET_CURSOR OUT MYCURSOR,ERRORCODE OUT INT,p_logID int,p_StartTime Date,p_EndTime Date,p_Operator varchar2 ,p_OrderField varchar2 ,
p_Desc int,p_PageSize Int,p_PageIndex Int,p_RecordCount Out Int);




end H_QUERYPACK;




包体:




create or replace package body H_QUERYPACK Is
-- Author : Evorul
-- Created : 2007-3-29
-- Purpose : 查询

-- 查询公司,分页用
PROCEDURE QUERYLOG (RET_CURSOR OUT MYCURSOR,ERRORCODE OUT INT,p_logID int,p_StartTime Date,p_EndTime Date,p_Operator varchar2 ,p_OrderField varchar2 ,
p_Desc int,p_PageSize Int,p_PageIndex Int,p_RecordCount Out Int)
AS
v_sql varchar2(3000);
v_sqlcount varchar2(3000);
v_orderfield varchar2(100);
v_order VARCHAR2(5); --顺序
v_count int;
v_heiRownum int;
v_lowRownum int;
BEGIN
ERRORCODE:=0;




v_sql:='select * from LOG Where 1=1 ';




if(p_logID <> 0)then
v_sql := v_sql || ' and id = ' || TO_CHAR(p_logID);
end if;




IF p_Operator Is Not Null Then then
v_sql := v_sql || 'And operator LIKE ''%' || RTRIM(LTRIM(p_Operator))||'%''';
end if;




v_sql := v_sql ||' and (TO_CHAR(time,''YYYYMMDD'') between ''' || to_char(p_StartTime, 'YYYYMMDD') ||''' and ''' || to_char(p_EndTime, 'YYYYMMDD') ||''')';






----取记录总数
v_sqlcount := 'select count(*) from (' || v_sql || ')';
execute immediate v_sqlcount into v_count;
p_RecordCount := v_count;




--排序字段
IF p_OrderField IS NOT NULL THEN
v_orderfield:=p_OrderField;
Else
v_orderfield:='ID';
END IF;
--是否降序
IF p_Desc <>0 THEN
v_order:=' ASC';
Else
v_order:=' DESC';
END IF;

v_sql:=v_sql || 'ORDER BY '|| v_orderfield || v_order;
----执行分页查询
v_heiRownum := p_PageIndex * p_PageSize;
v_lowRownum := v_heiRownum - p_PageSize + 1;




v_sql := 'SELECT * FROM (
SELECT A.*, rownum rn FROM ('|| v_sql ||') A WHERE rownum <= '|| to_char(v_heiRownum) || ') B WHERE rn >= ' || to_char(v_lowRownum) ;





OPEN RET_CURSOR FOR v_sql;




EXCEPTION
WHEN NO_DATA_FOUND THEN
ERRORCODE:=9999;
WHEN OTHERS THEN
ERRORCODE:=9999;
END QUERYLOG;

END H_QUERYPACK;
二、程序




DataAccess.cs







using System;
using System.Data;
using System.Data.OracleClient;
using System.Collections;
using System.Collections.Specialized;




/**////


///数据层 author: EvoRul date:2007-03-29
///

public class DataAccess
...{




/**////


/// 返回数据库连接字符串
///

public static String DatabaseConnectionString
...{
get
...{
NameValueCollection configSettings = (NameValueCollection)System.Configuration.ConfigurationManager.GetSection("appSettings");
return configSettings["connectionString"];
}
}




/**////


/// 返回每一页显示的纪录数
///

public static int RowsPerPage
...{
get
...{
NameValueCollection configSettings = (NameValueCollection)System.Configuration.ConfigurationManager.GetSection("appSettings");
return Convert.ToInt32(configSettings["rowsPerPage"]);
}
}




/**////


/// 获取特定日志集合
///

/// 日志类型
/// 操作人
/// 排序字段
/// 是否升序 0-降序,1-升
/// 页码
/// 页行数
/// 符合条件的总记录数
///
public static ArrayList QueryLog(string strOperator,DateTime dtStartTime,DateTime dtEndTime, string strOrderField,
int intASC, int PageIndex, int rowCount, out int recordSum)
...{
// 返回集合
ArrayList myArrayList = new ArrayList();




// 创建连接
OracleConnection myConnection = new OracleConnection(DatabaseConnectionString);




try
...{
// 打开连接
myConnection.Open();
}
catch (Exception ex)
...{
throw (ex);
}




try
...{
// 创建存储过程
OracleCommand myCommand = new OracleCommand("H_QUERYPACK.QUERYLOG", myConnection);
myCommand.CommandType = CommandType.StoredProcedure;
OracleDataReader dr;




// ============================== 参数定义 ==============================




// 返回值
myCommand.Parameters.Add("RET_CURSOR", OracleType.Cursor);
myCommand.Parameters["RET_CURSOR"].Direction = ParameterDirection.Output;
OracleParameter ret = myCommand.Parameters.Add("ERRORCODE", OracleType.Int32);
ret.Direction = ParameterDirection.Output;




OracleParameter retCountSum = myCommand.Parameters.AddWithValue("p_RecordCount", OracleType.Int32);
retCountSum.Direction = ParameterDirection.Output;




// 编号
myCommand.Parameters.AddWithValue("p_logID", OracleType.Int32).Value = 0;




// 用户编号
myCommand.Parameters.AddWithValue("p_Operator", OracleType.VarChar).Value = strOperator;




// 时间下限
myCommand.Parameters.AddWithValue("p_StartTime", OracleType.DateTime).Value = dtStartTime;




// 时间上限
myCommand.Parameters.AddWithValue("p_EndTime", OracleType.DateTime).Value =dtEndTime;




// 排序字段
myCommand.Parameters.AddWithValue("p_OrderField", OracleType.VarChar).Value = strOrderField;




// 怎么排序
myCommand.Parameters.AddWithValue("p_Desc", OracleType.Int32).Value = intASC;




// 每页行数
myCommand.Parameters.AddWithValue("p_PageSize", OracleType.Int32).Value = rowCount;




//页码
myCommand.Parameters.AddWithValue("p_PageIndex", OracleType.Int32).Value = PageIndex;







// ============================ 参数定义完毕 ============================




// 执行存储过程
dr = myCommand.ExecuteReader();




// 执行未成功
if (Convert.ToInt32(ret.Value) != 0)
throw new Exception("执行存储过程出错!");




// 总记录数
recordSum = Convert.ToInt32(retCountSum.Value);





while (dr.Read())
...{
// 创建新日志
Log log = new Log();




//操作业务类型
if (dr["operationtype"] != DBNull.Value)
...{
log.OperationType = Convert.ToString(dr["operationtype"]);
}
// 时间
if (dr["time"] != DBNull.Value)
log.Time = Convert.ToDateTime(dr["time"]);




// 用户
if (dr["operator"] != DBNull.Value)
...{
log.Operator = Convert.ToString(dr["operator"]);
}




// 信息
if (dr["info"] != DBNull.Value)
log.Info = Convert.ToString(dr["info"]);




// 加入返回集合
myArrayList.Add(log);
}




dr.Close();
return myArrayList;
}
catch (Exception ex)
...{
throw (ex);
}
finally
...{
myConnection.Close();
}
}
}







DataLogic.cs







using System;
using System.Data;
using System.Configuration;
using System.Collections;




/**////


/// 业务逻辑层 author: EvoRul date:2007-03-29
///

public class DataLogic
...{
public DataLogic()
...{
}




public static int recordSum = 0;





/**////


/// 查询日志
///

/// 操作人
/// 时间范围下限
/// 时间上限
/// 页码
///
public static IEnumerable GetLogData(string strOperator,DateTime dtStarTime,DateTime dtEndTime, string Pageid)
...{
return Log.GetList(strOperator,dtStarTime,dtEndTime,"time",1, Convert.ToInt32(Pageid),DataAccess.RowsPerPage,out recordSum);
}
}







Log.cs







using System;
using System.Data;
using System.Collections;




/**////


/// 日志类
///

public class Log
...{
// ============================== 成员 ==============================




protected string operationType;
/**////


/// 时间
///

protected DateTime time = new DateTime();




/**////


/// 用户
///

protected string m_operator;




/**////


/// 信息
///

protected string info = "";





// ============================== 属性 ==============================




public string OperationType
...{
get ...{ return operationType; }
set ...{ operationType = value; }
}
/**////


/// 时间
///

public DateTime Time
...{
get ...{ return time; }
set ...{ time = value; }
}





/**////


/// 用户
///

public string Operator
...{
get ...{ return m_operator; }
set ...{ m_operator = value; }
}




/**////


/// 信息
///

public string Info
...{
get ...{ return info; }
set ...{ info = value; }
}




// ============================== 方法 ==============================




/**////


/// 创建空日志实例
///

public Log()
...{
}




/**////


/// 新增日志
///

public void Add()
...{
try
...{
// 暂不支持该方法
throw new Exception("新增日志");
}
catch (Exception ex)
...{
throw (ex);
}
}




/**////


/// 修改日志(不支持)
///

public void Modify()
...{
// 暂不支持该方法
throw new Exception("修改日志");
}




/**////


/// 删除日志
///

public void Del()
...{
// 暂不支持该方法
throw new Exception("修改日志");
}




/**////


/// 获取特定的日志集
///

/// 操作人
/// 开始时间
/// 结束时间
/// 排序字段
/// 0-降序,1-升序
/// 页码
/// 页行数
/// 总记录数
///
public static ArrayList GetList(string strOperator,DateTime dtStartTime,DateTime dtEndTime,string strOrderField,int intASC, int PageIndex, int rowCount, out int recordSum)
...{
return DataAccess.QueryLog(strOperator,dtStartTime,dtEndTime,strOrderField, intASC, PageIndex, rowCount, out recordSum);
}
}







前台页 Default.aspx







<%...@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>




http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">




http://www.w3.org/1999/xhtml" >

客户端回调
















日志查询






操作人员:

&nbsp; Width="90px">

操作时间:

&nbsp; ReadOnly="False" Width="90px">- ID="TxtEndTime" runat="server" CssClass="border"
ReadOnly="False" Width="90px">















 







GridLines="Horizontal" PageSize="15"
Width="95%" BackColor="White" BorderColor="#336666" BorderStyle="Double" BorderWidth="3px" CellPadding="4">

































共有页结果
&nbsp;&nbsp;&nbsp;&nbsp;当前显示为第页&nbsp;&nbsp;&nbsp;15条/页&nbsp;&nbsp;
上一页
下一页
跳转至第







Type="string" />
PropertyName="Text" Type="DateTime" />
PropertyName="Text" Type="DateTime" />















Default.aspx.cs







using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.IO;
using System.Text;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Globalization;




public partial class _Default : System.Web.UI.Page,ICallbackEventHandler
...{
protected void Page_Load(object sender, EventArgs e)
...{
this.Submit.Attributes.Add("onclick", "QueryServer(txtOperator,TxtStartTime,TxtEndTime,1,"true");return false;");
this.DownListIndex.Attributes.Add("onchange", "QueryServer(txtOperator,TxtStartTime,TxtEndTime,this.value,"false");return false;");
}




回调分页#region 回调分页
private string serverReturn;




public string GetCallbackResult()
...{




string[] parts = serverReturn.Split('|');
//根据传递的方法名进行调用,并传递相应的参数,目前只支持一个参数
return (string)GetType().GetMethod(parts[0]).Invoke(this, new object[] ...{ parts[1] });
}




public void RaiseCallbackEvent(string eventArgument)
...{
serverReturn = eventArgument;
}




/**////


/// 根据从客户端传来的值,对GridView的内容进行更新,并将更新后的GridView的html返回
///

///
///




public string ServerMethodQuery(string arg)
...{
Logs.DataSourceID = "DataSourceLog";




string[] arrayArg = arg.Split('$');
this.txtOperator.Text = arrayArg[0];
this.TxtStartTime.Text= arrayArg[1];
this.TxtEndTime.Text = arrayArg[2];




intialPageSelect();
this.DownListIndex.SelectedValue = arrayArg[3];
Logs.DataBind();




//传入客户端字符串,并用"$"分割
StringBuilder strHtml = new StringBuilder();
strHtml.Append(RenderControl(Logs));
strHtml.Append("$");
strHtml.Append(DataLogic.recordSum.ToString());
strHtml.Append("$");
strHtml.Append(Convert.ToString(DataLogic.recordSum / DataAccess.RowsPerPage + 1));
strHtml.Append("$");
strHtml.Append(arrayArg[3]);
if (arrayArg[4] == "true")
...{
strHtml.Append("$");




intialPageSelect();
strHtml.Append(RenderControl(DownListIndex));
}




return strHtml.ToString();
}




private string RenderControl(Control control)
...{
StringWriter writer1 = new StringWriter(CultureInfo.InvariantCulture);
HtmlTextWriter writer2 = new HtmlTextWriter(writer1);




control.RenderControl(writer2);
writer2.Flush();
writer2.Close();




return writer1.ToString();
}




/**////


/// 初始化页下拉单
///

private void intialPageSelect()
...{
DownListIndex.Items.Clear();
for (int i = 0; i < (DataLogic.recordSum / DataAccess.RowsPerPage + 1); i++)
...{
this.DownListIndex.Items.Add(Convert.ToString(i + 1));
}




}
#endregion
}
如有错误,欢迎指正!











If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759