留言簿

我要留言
留言搜索

2013-06-19 11:06  小白

杨老师,您的控件怎么应用这个存储过程?
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER PROCEDURE [dbo].[p_GetRecordFromPage]
@tblName varchar(255),
@strSelectFiled varchar(4000),
@fldName varchar(255),
@strWhere varchar(2000),
@strOrder varchar(2000),
@PageSize int,
@PageIndex int,
@TotalCount int output,
@TotalPageCount int output
as
	DECLARE
		@strCountSql nvarchar(2000),
		@strSql nvarchar(2000),
		@startRow int,
		@endRow int
	SET @startRow = (@pageindex - 1) * @pagesize + 1
	SET @endRow = @startRow + @pagesize -1
Begin	
	IF(@strWhere='')
		set @strWhere='1=1'
	IF(@strOrder='')
		set @strOrder=@fldName+' desc'
	IF @TotalCount is null
	Begin
		set @strCountSql='select @TotalCount=Count('+@fldName+') from '+@tblName+' where '+@strWhere
		exec sp_executesql @strCountSql,N'@TotalCount int output',@TotalCount output
	End
	IF((@TotalCount%@PageSize)>0)
		Begin
			set @TotalPageCount=(@TotalCount/@PageSize)+1
		End
	Else
		Begin
			set @TotalPageCount=@TotalCount/@PageSize
		End
	set @strSql='select '+@strSelectFiled+' from (select '+@strSelectFiled+',row_number() over (order by '+@strOrder+') as [RowNumber] '
	set @strSql=@strSql+'from '+@tblName+' where '+@strWhere+') as t '
	set @strSql=@strSql+'where rownumber BETWEEN '+convert(varchar(100),@startRow)+' AND '+convert(varchar(100),@endRow)+' order by '+@strOrder		
	Exec(@strSql)
End
回复:您好,分页控件和数据访问是没有直接关系的,您只要给控件设置分页总记录数并编写分页事件处理程序即可,上面的存储过程中,@TotalCount应该就是要分页的记录总数,您把这个返回值赋给AspNetPager的RecordCount属性即可,另外将AspNetPager的PageSize和PageIndex的值传给存储过程中的@PageSize和@PageIndex参数即可。谢谢!

2013-06-19 11:05  小白

杨老师啊,如果用存储过程的话,每个页面都要写一个存储过程吗?
回复:您好,不同的表可以有不同的存储过程,也可以用网上那种通用的存储过程,但通用的存储过程一般都是动态执行拼接成的sql语句,执行性能上并没有太大优势。谢谢!

2013-06-18 11:56  mvc3 初学者

你好,杨老师,我刚下载了,您的mvcpager1.5的dll。我再我的mvc3程序里面,安装您写的,把mvcpager1.5.dll引入进去后运行报错
未能加载文件或程序集“MvcPager1.5Mvc3(1)”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040) 
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.IO.FileLoadException: 未能加载文件或程序集“MvcPager1.5Mvc3(1)”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)

源错误: 

执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。  

程序集加载跟踪: 下列信息有助于确定程序集“MvcPager1.5Mvc3(1)”未能加载的原因。

回复:您好,请检查一下bin目录下是否存在MvcPager的程序集文件,并且您引用的MvcPager使用的ASP.NET MVC版本与您的ASP.NET MVC版本一致。谢谢!

2013-06-18 10:03  web爱好者

杨老师,我页面上有两个AspNetPager分页控件为不同的数据源分页,第一个分页正常,但是第二个分页就有点问题,本来只允许显示3条记录。结果首次加载的时候第二个全部都出来了,点击下一页时数据就正常了。请问杨老师这个是什么问题我调试了很久找不出原因,页面呈现第一个数据分页正常,就是第二个数据全部出来。
回复:您好,这个问题应该是您的数据绑定问题,和分页控件没有关系,您需要认真调试检查一下绑定的数据,另外特别注意两个AspNetPager不能使用相同的页索引参数名(UrlPageIndexName)!如果一个使用默认值,另一个就必须显式设置成不同的值,详细信息请参考控件帮助文档。谢谢!

2013-06-18 09:03  沧海

您好,杨老师,我在使用aspnetpager空间进行url分页的时候是用session来保存查询条件的,我是用这样的代码清空session的:
 if (!IsPostBack)
        {
            BindDDl();
            if (string.IsNullOrEmpty(Request["page"]))
            {
                Session["txtName"] = "";
                Session["slsex"] = "";
            }
            else
            {
                if (Session["txtName"] != null && Session["txtName"].ToString()!="")
                {
                    txtName.Value = Session["txtName"].ToString();
                }

                if (Session["slsex"] != null && Session["slsex"].ToString()!="")
                {
                    DropDownList1.SelectedValue = Session["slsex"].ToString();
                }
            }

            GetList();
            
        }

但是在测试的时候发现有问题,当我输入了搜索条件后,点击搜索按钮进行搜索,查询出来了记录,点击第二页,能够显示查询出来的数据,但是当我点击第一页的时候地址栏中的url不会显示page参数,所以session被清空了,显示的是搜索之前的默认的数据,这个问题应该怎么解决?如果用session来保存查询条件,应该在什么时候清空?
回复:您好,不能用页索引值作为清除session的条件,您可以另外放一个清除搜索条件或者显示全部记录之类的按钮,用户点击按钮时再清空搜索条件。谢谢!

2013-06-17 11:18  数字

您好,杨老师,请问我的也买年不是直接拖拽到页面上就能用的,页面是aspx,但是里面的html标签都是stringbuilder,输出的,怎么能获取aspnetpager的html的分页字符串呢
回复:您好,我不是很明白您的意思,不知道这篇文章是不是可以解答您的问题:Writing A Page To A String,或者这个:Render aspx page as a string。谢谢!

2013-06-15 23:19  刘平

MvcPager 是不是不支持MVC 4
使用的时候出现如下错误
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

指定的数组必须具有相同的维数。 
回复:您好,虽然现在发布的最新的MvcPager是针对MVC3.0的,但也支持4.0,您说的问题已经有很多人反映过,这个问题出现在从mvc 3升级到mvc 4的项目中,我一直没找到原因,很可能是mvc4存在一定的兼容问题而导致的,最近正在升级MvcPager到2.0版,大部分功能已开发完成,现在正在最终测试阶段,如果您感兴趣,可以留下邮箱,我给您发一份最新版的控件您可以试一下,发现问题我随时解决。谢谢!

2013-06-08 10:48  web爱好者

杨老师:一个AspNetPager分页控件是否可以为两个repeater同时分页。谢谢 !
回复:您好,分页控件和Repeater等数据绑定控件是没有直接关系的,它只显示一系列分页按钮并在点击按钮时引发一个分页事件,怎么绑定数据或显示数据都是您自己的事,所以您想给多少个数据绑定控件绑定数据都可以,不过我看不出您这样做有什么意义?如果每个Repeater要显示的数据不同的话,那肯定是不行的。谢谢!

2013-06-08 09:49  常在

刚才那个问题使用UrlPager配合路由解决了,不知道是不是aspnetpager是不是不支持URL重写来模拟路由地址。
感谢一下,真的很好用的分页控件。
回复:是的,AspNetPager不支持路由,UrlPager才支持。谢谢!

2013-06-08 09:37  常在

<!--前代码-->
<sg:AspNetPager ID="Pager1" runat="server" OnPageChanged="Pager1_OnPageChanged" CssClass="pager" CurrentPageButtonClass="current" PrevPageText="Prev" NextPageText="Next"
            PrevNextButtonsClass="next" MoreButtonsClass="more" PageSize="1" ShowFirstLast="false" NumericButtonCount="6"
            EnableUrlRewriting="True" UrlRewritePattern="/default-page-{0}.html">
    </sg:AspNetPager>

<!--后代码-->
protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                bindsales();
                Response.Write(Pager1.CurrentPageIndex + "<br />");
                Response.Write(Pager1.PageSize + "<br />");
                Response.Write(Pager1.RecordCount + "<br />");
                Response.Write(RouteData.Values["p"] + "<br />");
                Response.Write(Request.QueryString["page"] + "<br />");
            }
        }

        #region "List Sales"
        protected void bindsales()
        {
            DboDataContext Dbo = new DboDataContext();
            var list1 = from a in Dbo.T_AdMain orderby a.PostDate descending select a;
            if (list1.Count() > 0)
            {
                Pager1.RecordCount = list1.Count();
                int CurrentPageIndex = string.IsNullOrEmpty(RouteData.Values["p"] as string) ? 1 : Int32.Parse(RouteData.Values["p"] as string);
                r1.DataSource = list1.Skip((CurrentPageIndex - 1) * Pager1.PageSize).Take(Pager1.PageSize);
                r1.DataBind();
            }
            list1 = null;
        }
        protected void Pager1_OnPageChanged(object sender, EventArgs e)
        {
            bindsales();
        }
        #endregion

数据库linq to sql,使用了URL重写,刚开始Pager1.CurrentPageIndex总是为1,后台我动态指定CurrentPageIndex,分页是成功后,可是分页样式不启动了,望兄弟指教,用了这个很多年了,urlpager和aspnetpager以mvcpager都有使用,但是配合asp.net routing 路由使用aspnetpager这还是第一回。
回复:您好,AspNetPager不支持路由,请用UrlPager。谢谢!
;