ant's profilemicroantPhotosBlogListsMore ![]() | Help |
|
August 25 gridview存储过程分页(二)在服务器端主要是初始化gridview,也就是第一页。然后就是页码按钮的处理事件,代码如下: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindGV(this.gvTest, "A101", 5,1, 1, "CID", "CID", null);![]() this.lbtnPrev.Enabled = false; this.lblCurrentInfo.Text = "1"; this.lblCount.Text = getPageNum("A101", 5).ToString() ; } }![]() public int getPageNum(string tableName, int pagesize) { using (SqlDataObject sodo = new SqlDataObject()) { string strSql = "select count(*) from " + tableName; int count =Convert.ToInt32(sodo.ExecuteScalar(strSql));![]() int pagenum =Convert.ToInt32(Math.Ceiling(Convert.ToDouble(count/pagesize)));![]() return pagenum; } }![]() /// <summary> /// 按钮处理事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void PageIndex_Changed(object sender, EventArgs e) { LinkButton linkbtn = (LinkButton)sender; switch (linkbtn.ID.Trim()) { case "lbtnFirst": BindGV(this.gvTest, "A101", 5, 1, 1, "CID", "CID", null);![]() this.lblCurrentInfo.Text = "1";![]() break; case "lbtnPrev":![]() BindGV(this.gvTest, "A101", 5, Convert.ToInt32(this.lblCurrentInfo.Text) - 1, 1, "CID", "CID", null);![]() this.lblCurrentInfo.Text = (Convert.ToInt32(this.lblCurrentInfo.Text) - 1).ToString();![]() ![]() break; case "lbtnNext":![]() BindGV(this.gvTest, "A101", 5, Convert.ToInt32(this.lblCurrentInfo.Text) + 1, 1, "CID", "CID", null);![]() this.lblCurrentInfo.Text = (Convert.ToInt32(this.lblCurrentInfo.Text) + 1).ToString();![]() ![]() ![]() break; case "lbtnLast": BindGV(this.gvTest, "A101", 5, Convert.ToInt32(this.lblCount.Text), 1, "CID", "CID", null);![]() this.lblCurrentInfo.Text = this.lblCount.Text;![]() break; } if (Convert.ToInt32(this.lblCurrentInfo.Text) >= Convert.ToInt32(this.lblCount.Text) && Convert.ToInt32(this.lblCurrentInfo.Text) <=1) { this.lbtnPrev.Enabled = false; this.lbtnNext.Enabled = false; this.lbtnFirst.Enabled = false; this.lbtnLast.Enabled = false; } else if (Convert.ToInt32(this.lblCurrentInfo.Text) >= Convert.ToInt32(this.lblCount.Text)) { this.lbtnPrev.Enabled = true; this.lbtnNext.Enabled = false; this.lbtnFirst.Enabled = true; this.lbtnLast.Enabled = false; } else if (Convert.ToInt32(this.lblCurrentInfo.Text) <= 1) { this.lbtnPrev.Enabled = false; this.lbtnNext.Enabled = true; this.lbtnFirst.Enabled = false; this.lbtnLast.Enabled = true; } else { this.lbtnPrev.Enabled = true; this.lbtnNext.Enabled = true; this.lbtnFirst.Enabled = true; this.lbtnLast.Enabled = true; } }![]() /// <summary> /// 绑定到gridview /// </summary> /// <param name="gv">gridview</param> /// <param name="tableName">分页的表名</param> /// <param name="size">页码大小</param> /// <param name="pageindex">第几页</param> /// <param name="isAsc">升降序</param> /// <param name="OderColumName">排序的列</param> /// <param name="KeyID">主键</param> /// <param name="condictions">查询条件</param> private void BindGV(GridView gv, string tableName, int size, int pageindex, int isAsc, string OderColumName,string KeyID, string condictions) { using (SqlDataObject sodo = new SqlDataObject()) { SqlParameter[] sps = new SqlParameter[7]; sps[0] = new SqlParameter("@TableName", tableName); sps[1] = new SqlParameter("@PageSize", size); sps[2] = new SqlParameter("@PageIndex", pageindex); sps[3] = new SqlParameter("@IsAsc", 1); sps[4] = new SqlParameter("@OderColumName", OderColumName); sps[5] = new SqlParameter("@KeyID", KeyID); sps[6] = new SqlParameter("@Conditions", condictions); DataTable dt = sodo.getDataTable("sp", "sp_CTE", sps); gv.DataSource = dt.DefaultView; gv.DataBind();![]() } }gridview存储过程分页(一) 抽空写一下自己用的关于GridView存储过程分页的代码,优点就不用多说了,主要是用于数据库端分页,解决数据量过大的分页问题。存储过程还是以前写的CTE方法的分页,还是在这里贴一下代码吧,具体请见存储过程分页实现代码,2005 T-SQL新增功能一文。 USE [WGSMSDbase] GO /****** 对象: StoredProcedure [dbo].[sp_CTE] 脚本日期: 08/25/2007 11:39:01 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO![]() ![]() -- ============================================= -- Author: <Author,,microant> -- Create date: <Create Date,,20070705> -- Description: <Description,,CTE分页> -- ============================================= CREATE PROCEDURE [dbo].[sp_CTE]( -- Add the parameters for the stored procedure here @TableName nvarchar(200) = 'testTable', --表名 @PageSize int = 15, --页面大小 @PageIndex int =2 , --页面的序号 --@IsCountNull bit =1, --返回记录是否为空 @IsAsc bit = 1 , --是否卫升序,升序为1,降序为0 @OderColumName nvarchar(200) = null, --排序字段名 @KeyID nvarchar(50) = 'id', --主键 @Conditions nvarchar(500) = null --查询条件 ) AS![]() -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON;![]() declare @strSql nvarchar(1000) declare @tempstr nvarchar(1000) declare @orderstr nvarchar(400) declare @ctestr nvarchar(400) --判断排序方式,@IsAsc =1 升序, 0降序,设置排序语句 if @IsAsc = 1 begin if(@OderColumName is null or @OderColumName = '') set @orderstr = ' order by ' + @KeyID + ' asc' else set @orderstr = ' order by ' + @OderColumName + ' asc' end else begin if(@OderColumName is null or @OderColumName = '') set @orderstr = ' order by ' + @KeyID + ' desc' else set @orderstr = ' order by ' + @OderColumName + ' desc' end --CTE set @ctestr ='with Table_CET as ( select CEILING((ROW_NUMBER() OVER (' + @orderstr + '))/' + str(@PageSize) + ') as page_num, * from ' + @TableName + ')' ; begin if(@Conditions is null or @Conditions = '') set @strSql = @ctestr + 'select * from Table_CET where page_num = ' + str(@PageIndex); else set @strSql = @ctestr + 'select * from Table_CET where page_num = ' + str(@PageIndex)+ ' and ' + @Conditions; print @strSql end begin exec sp_executesql @strSql end![]() ![]() ![]() 客户端代码如下,主要包含首页,末页,上一页,下一页,当前页码,总页码等一些必要信息,最主要的就是给按钮添加处理事件OnClick。 August 23 关于updatepanel中注册执行javascript 好些天都在糊里糊涂,最近也比较懒,居然看到了个留言,永远不更新的博客一等奖,相当尴尬,哈哈。写一些最近自己或别人遇到的小问题吧。 1、关于updatepanel注册js 最近在项目里需要用到altas,本人也是新手,老用最简单的updatepanel,在注册脚本时也遇到了困难,无法注册。本来是在updatepanel中放了一个gridview,偶想在girdview中一个模板列点击弹出一个窗体,注册 window.open()来解决问题。本来不是在updatepanel中,所以用 ClientScript.RegisterStartupScript直接注册挺好使。 在拖入updatepanel后发现无法注册脚本,想想RegisterStartupScript本来是在页面加载时启动js的,在updatepanel中部分刷新,肯定是无法注册的。 后来发现了ScriptManager.RegisterStartupScript方法,挺好使,呵呵。 ScriptManager.RegisterClientScriptBlock(UpdatePanelName, typeof(UpdatePanel), "标识key", "脚本", true); 下面是一个demo,模板列定义如下: protected void gvClientInfo_RowCommand(object sender, GridViewCommandEventArgs e)
{ & nbsp; //如果是linkButton被点击 if(e.CommandName.Equals("linkbtnCID")) { LinkButton lbtn = (LinkButton)e.CommandSource; GridViewRow dgRow = (GridViewRow)lbtn.Parent.Parent; string tmpText = lbtn.Text.ToString(); tmpText ="window.open('customerDetailsInfo.aspx?CID=" + tmpText + "' ,'newwindow','height=550, width=700, menubar=no ')"; ScriptManager.RegisterStartupScript(this.UpdatePanel2, this.GetType(), "click", tmpText, true); } }
RegisterStartupScript 将 js嵌入到页面的底部,</form> 的前面< br /> RegisterClientScriptBlock 将 js嵌入到页面中开启元素 <form> 后面 3、关于“该行已经属于另一个表”错误 DataTable tmpdt = sodo.getDataTable("text", strSql, sp); dt.Rows.Add(tmpdt.Rows[0]); 这个明显的错误就是tmpdt的行是一个对象引用,相当于一个指针,错误是难免的,可有以下解决办法:< br /> DataTable tmpdt = sodo.getDataTable("text", strSql, sp); 1、 dt.Rows.Add(tmpdt.Rows[0].ItemArray); 2、 dt.ImportRow(tmpdt.Rows[0]); |
|
|