[ExtNet]Grid怎么实现服务器端分页、排序、查询?-MS SQL存储过程分页
2012-08-27 00:24
555 查看
存储过程:
HTML:
CS:
Oracle版本:
CS
CREATE procedure [dbo].[AspNetPage] @tblName varchar(1000), -- 表名 @SelectFieldName varchar(4000), -- 要显示的字段名(不要加select) @strWhere varchar(4000), -- 查询条件(注意: 不要加 where) @OrderFieldName varchar(255), -- 排序索引字段名 @PageSize int , -- 页大小 @PageIndex int = 1, -- 页码 @iRowCount int output, -- 返回记录总数 @OrderType bit = 0 -- 设置排序类型, 非 0 值则降序 AS declare @strSQL varchar(4000) -- 主语句 declare @strTmp varchar(4000) -- 临时变量 declare @strOrder varchar(400) -- 排序类型 declare @strRowCount nvarchar(4000) -- 用于查询记录总数的语句 set @OrderFieldName=ltrim(rtrim(@OrderFieldName)) if @OrderType != 0 begin set @strTmp = '<(select min' set @strOrder = ' order by ' + @OrderFieldName +' desc' end else begin set @strTmp = '>(select max' set @strOrder = ' order by ' + @OrderFieldName +' asc' end set @strSQL = 'select top ' + str(@PageSize) + @SelectFieldName+' from ' + @tblName + ' where ' + @OrderFieldName + @strTmp + '(' + right(@OrderFieldName,len(@OrderFieldName)-charindex('.',@OrderFieldName)) + ') from (select top ' + str((@PageIndex-1)*@PageSize) + @OrderFieldName + ' from ' + @tblName + @strOrder + ') as tblTmp)' + @strOrder if @strWhere != '' set @strSQL = 'select top ' + str(@PageSize) + @SelectFieldName+' from ' + @tblName + ' where ' + @OrderFieldName + @strTmp + '(' + right(@OrderFieldName,len(@OrderFieldName)-charindex('.',@OrderFieldName)) + ') from (select top ' + str((@PageIndex-1)*@PageSize) + @OrderFieldName + ' from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder if @PageIndex = 1 begin set @strTmp = '' if @strWhere != '' set @strTmp = ' where ' + @strWhere set @strSQL = 'select top ' + str(@PageSize) + @SelectFieldName+' from ' + @tblName + @strTmp + ' ' + @strOrder end exec(@strSQL) if @strWhere!='' begin set @strRowCount = 'select @iRowCount=count(*) from ' + @tblName+' where '+@strWhere end else begin set @strRowCount = 'select @iRowCount=count(*) from ' + @tblName end exec sp_executesql @strRowCount,N'@iRowCount int out',@iRowCount out
HTML:
<ext:ResourceManager ID="ResourceManager1" runat="server"> </ext:ResourceManager> <ext:Store runat="server" ID="ItemStore" OnRefreshData="Store1_RefershData"> <Reader> <ext:JsonReader> <Fields> <ext:RecordField Name="MB001" /> <ext:RecordField Name="MB002" /> </Fields> </ext:JsonReader> </Reader> <Proxy> <ext:PageProxy> </ext:PageProxy> </Proxy> </ext:Store> <ext:TextField runat="server" ID="txtItem"> </ext:TextField> <ext:Button runat="server" ID="btnQuery" Text="查询" Icon="Find"> <DirectEvents> <Click OnEvent="ShowChage"></Click> </DirectEvents> </ext:Button> <ext:GridPanel ID="ItemGrid" runat="server" Border="true" Margins="5 5 5 5" AnchorHorizontal="98%" Height="550" Icon="Layers" TrackMouseOver="true" StripeRows="true" Title="品号基本信息" StoreID="ItemStore"> <ColumnModel ID="ColumnModel1" runat="server"> <Columns> <ext:Column Header="品号" DataIndex="MB001" Width="250"> </ext:Column> <ext:Column Header="品名" DataIndex="MB002" Width="250"> </ext:Column> </Columns> </ColumnModel> <LoadMask ShowMask="true" /> <SelectionModel> <ext:RowSelectionModel ID="RowSelectionModel1" runat="server" /> </SelectionModel> <BottomBar> <ext:PagingToolbar ID="PagingToolBar1" StoreID="ItemStore" PageSize="3" runat="server" /> </BottomBar> </ext:GridPanel>
CS:
protected void Store1_RefershData(object sender, StoreRefreshDataEventArgs e) { int PageSize = this.PagingToolBar1.PageSize; //获取当前在页面中PagingToolBar 的PageSize的值 int Count = 0; int CurPage = e.Start / PageSize + 1; //获取当前的页码是多少,也就是第几页 string strWhere = ""; if (txtItem.Text.Trim() != "") { strWhere = " MB001 like '%" + txtItem.Text.Trim() + "%'"; } var store = this.ItemGrid.GetStore(); DataTable dt = GetPageList("INVMB", " MB001,MB002,MB003", strWhere, PageSize, CurPage, out Count); //连接数据库 e.Total = Count; this.PagingToolBar1.DisplayMsg = CurPage + " - " + PageSize + "条 共 " + e.Total + " 条"; if (Count > 0) { store.DataSource = dt;//绑定数据 store.DataBind(); } else { X.Msg.Alert("查询结果", "<font style='color:red;'>没有找到任何数据!</font>").Show(); } } /// <summary> /// /// </summary> /// <param name="TableName">表名称</param> /// <param name="ReturnFields">要显示的字段名</param> /// <param name="strwhere">查询条件</param> /// <param name="PageSize">每页显示数据条数</param> /// <param name="CurPage">当前第几页,页码</param> /// <param name="RowCount">返回的总页数</param> /// <returns></returns> public DataTable GetPageList(string TableName, string ReturnFields, string strwhere, int PageSize, int CurPage, out int RowCount) { SqlCommand cmd = new SqlCommand("AspNetPage");//存储过程名称 cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@tblName", TableName); //表名称 cmd.Parameters.AddWithValue("@OrderFieldName", "MB001");//排序索引字段名 cmd.Parameters.AddWithValue("@PageIndex", CurPage);//当前第几页,页码 cmd.Parameters.AddWithValue("@PageSize", PageSize);//每页显示数据条数 cmd.Parameters.AddWithValue("@SelectFieldName", ReturnFields);//要显示的字段名(不要加select) cmd.Parameters.AddWithValue("@OrderType", 1);//设置排序类型, 非 0 值则降序 cmd.Parameters.AddWithValue("@strWhere", strwhere);//查询条件(注意: 不要加 where) cmd.Parameters.Add(new SqlParameter("@iRowCount", SqlDbType.Int)); cmd.Parameters["@iRowCount"].Direction = ParameterDirection.Output; DataTable dt = RunProcedureCmd(cmd); RowCount = Convert.ToInt32(cmd.Parameters["@iRowCount"].Value.ToString()); //返回的总页数 return dt; } /// <summary> /// 执行存储过程,返回DataTable /// </summary> /// <param name="cmd">存储过程名称</param> /// <returns></returns> public DataTable RunProcedureCmd(SqlCommand cmd) { DataTable result = new DataTable(); SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DEMO"].ConnectionString);//你自己的链接字符串 try { if ((conn.State == ConnectionState.Closed)) { conn.Open(); } cmd.Connection = conn; SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(result); da.Dispose(); conn.Close(); conn.Dispose(); return result; } catch (Exception ex) { conn.Close(); conn.Dispose(); throw ex; } } }
Oracle版本:
create or replace package pkg_AspNetPage is type mycursor is ref cursor; procedure proc_AspNetPage(tblName in varchar2,SelectFieldName in varchar2,strWhere in varchar2,OrderFieldName in varchar2,OrderType in number, start1 in number,limit1 in number,RecoudCount out number,datatable out mycursor ); end pkg_AspNetPage; create or replace package body pkg_AspNetPage is procedure proc_AspNetPage(tblName in varchar2,SelectFieldName in varchar2,strWhere in varchar2,OrderFieldName in varchar2,OrderType in number, start1 in number,limit1 in number,RecoudCount out number,datatable out mycursor ) is sqltxt varchar2(4000); v_sql varchar2(4000); v_ordertype varchar2(10); begin IF OrderType=0 THEN v_ordertype:='asc'; ELSE v_ordertype:='desc'; END IF; sqltxt:='select * from ' || tblName || ' u where ' || strWhere ||' order by ' || OrderFieldName || ' ' || v_ordertype; sqltxt:='select rownum rn,t.* from ('||sqltxt||') t'; v_sql:='select count(*) from('||sqltxt||')'; execute immediate v_sql into RecoudCount; v_sql := 'select '|| SelectFieldName ||' from (' || sqltxt || ') where rn between ' ||start1 || ' and ' || limit1; open datatable for v_sql; end proc_AspNetPage; end pkg_AspNetPage;
CS
using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Text; using System.Data.OracleClient; using System.Collections; //操作函数 public static readonly string CONN_STRING_Oracle = "Data Source=XXXX;Password=XXXX;User ID=XXXX"; public static OracleConnection conn = new OracleConnection(CONN_STRING_Oracle); public static void OpenConnection() { if (conn.State != ConnectionState.Open) conn.Open(); } public static void CloseConnection() { if (conn.State == ConnectionState.Open) conn.Close(); } public static DataTable GetPageList_Oracle(string tblName, string selectFieldName, string strWhere, string OrderFieldName, int OrderType, int start, int limit, out int RecoudCount) { try { OracleParameter[] optr = new OracleParameter[9]; // 初始化参数 optr[0] = new OracleParameter(); optr[0].ParameterName = "tblName"; optr[0].OracleType = OracleType.VarChar; optr[0].Value = tblName; optr[1] = new OracleParameter(); optr[1].ParameterName = "SelectFieldName"; optr[1].OracleType = OracleType.VarChar; optr[1].Value = selectFieldName; optr[2] = new OracleParameter(); optr[2].ParameterName = "strWhere"; optr[2].OracleType = OracleType.VarChar; optr[2].Value = strWhere; optr[3] = new OracleParameter(); optr[3].ParameterName = "OrderFieldName"; optr[3].OracleType = OracleType.VarChar; optr[3].Value = OrderFieldName; optr[4] = new OracleParameter(); optr[4].ParameterName = "OrderType"; optr[4].OracleType = OracleType.Number; optr[4].Value = OrderType; optr[5] = new OracleParameter(); optr[5].ParameterName = "start1"; optr[5].OracleType = OracleType.Number; optr[5].Value = start; optr[6] = new OracleParameter(); optr[6].ParameterName = "limit1"; optr[6].OracleType = OracleType.Number; optr[6].Value = limit; optr[7] = new OracleParameter(); optr[7].ParameterName = "RecoudCount"; optr[7].OracleType = OracleType.Number; optr[7].Direction = ParameterDirection.Output; optr[8] = new OracleParameter(); optr[8].ParameterName = "datatable"; optr[8].OracleType = OracleType.Cursor; optr[8].Direction = ParameterDirection.Output; OracleCommand cmd = new OracleCommand(); cmd.CommandText = "pkg_AspNetPage.proc_AspNetPage"; cmd.CommandType = CommandType.StoredProcedure; foreach (OracleParameter soptr in optr) { cmd.Parameters.Add(soptr); } DataTable dt = RunProcedureCmd(cmd); //执行存储过程 RecoudCount = Int32.Parse(optr[7].Value.ToString()); return dt; } catch { RecoudCount = 0; return null; } } public static DataTable RunProcedureCmd(OracleCommand cmd) { DataTable result = new DataTable(); try { OpenConnection(); cmd.Connection = conn; OracleDataAdapter da = new OracleDataAdapter(cmd); da.SelectCommand.ExecuteNonQuery(); da.Fill(result); return result; } catch (Exception ex) { throw ex; } finally { CloseConnection(); } }
protected void Store1_RefreshData(object sender, StoreRefreshDataEventArgs e) { int PageSize = this.PagingToolBar1.PageSize; //获取当前在页面中PagingToolBar 的PageSize的值 int Count = 0; int CurPage = e.Start / PageSize + 1; //获取当前的页码是多少,也就是第几页 int start = PageSize * (CurPage - 1) + 1; int limit = start + PageSize - 1; string strWhere = "1=1"; //编辑条件 int order=1; //1为倒序,0为顺序 DataTable dt = new DataTable(); dt = Opp.OracleOpp.GetPageList_Oracle("(表名)", "ID,...(字段列表)", strWhere, "ID", order, start, limit, out Count); Store1.DataSource = dt; Store1.DataBind(); e.Total = Count; }
相关文章推荐
- [ExtNet]Grid怎么实现服务器端分页、排序、查询?-MS SQL存储过程分页
- [ExtNet] GridPanel怎么实现服务器端分页、排序、查询?--Oracel存储过程分页
- [ExtNet] GridPanel怎么实现服务器端分页、排序、查询?--Oracel存储过程分页
- 与ASP.NET服务器端结合返回JSON数据实现ExtJS GridPanel客户端分页
- datatables+java实现服务器端分页,排序,查询,列的显示影藏
- 在ASP.NET MVC中使用Boostrap实现产品的展示、查询、排序、分页
- datatables+java实现服务器端分页,排序,查询,列的显示影藏
- datatables+java实现服务器端分页,排序,查询,列的显示隐藏
- SQL Server2005使用ROW_NUMBER() OVER实现按分组查询Count()数量排序并分页
- ADO.net实现数据查询表的分页
- 使用Ext中的Grid,Form,Dialog来实现列表,创建,更新,删除,查找和分页功能
- ASP.NET查询分页技术:实现Web数据分页浏览
- .NET+MVC+ORACLE存储分页查询一后端实现
- 利用JQuery方便实现基于Ajax的数据查询、排序和分页功能
- JPA集成queryDSL,灵活查询 (3.实现条件查询,排序,分页功能)
- Ext.Net 1.2.0_Ext.Net.GridPanel 服务器端分页
- Ext.Net 1.x_Ext.Net.Combox 实现模糊异步查询
- Silverlight学习笔记二:DataGrid 服务器端分页、排序的实现
- ASP.NET怎么实现新闻页面的分页功能
- 使用bootstraptable插件实现表格记录的查询、分页、排序操作