• 牛腩新闻发布系统 总结 1:aspnetpager 使用总结 ajax控件总结


    要使用 aspnetpager 的过程

    1:要下载引用 aspnetpager 控件

    2:要有分页的存储过程,可以单表查询,也可以多表查询

    -- =============================================
    -- Author: 牛腩
    -- Create date: 2009-07-22 12:41
    -- Description: 分页,用到了ROW_NUMBER()
    -- =============================================
    ALTER PROCEDURE [dbo].[proc_FenYe]
    @tblName   varchar(255),       -- 表名
    @strGetFields varchar(1000) = '*', -- 需要返回的列,默认*
    @strOrder varchar(255)='',      -- 排序的字段名,必填
    @strOrderType varchar(10)='ASC', -- 排序的方式,默认ASC
    @PageSize   int = 10,          -- 页尺寸,默认
    @PageIndex int = 1,           -- 页码,默认
    @strWhere varchar(1500) = '' -- 查询条件(注意: 不要加where)
    AS

    declare @strSQL   varchar(5000)

    if @strWhere !=''
    set @strWhere=' where '+@strWhere

    set @strSQL=
    'SELECT * FROM ('+
    'SELECT ROW_NUMBER() OVER (ORDER BY '+@strOrder+''+@strOrderType+') AS pos,'+@strGetFields+''+
    'FROM '+@tblName+''+@strWhere+
    ') AS sp WHERE pos BETWEEN '+str((@PageIndex-1)*@PageSize+1)+' AND '+str(@PageIndex*@PageSize)

    exec (@strSQL)

    3:在工具栏托 aspnetpager控件到需要分页的地方,然后在 代码里面需要设置


    int

    pagesize = anp.PageSize;    //这个其实是为 分页的存储过程的调用准备的


    int pageindex = anp.CurrentPageIndex;          //同上


    anp.RecordCount = nm.CalcCount(cond);          //这是设置 anp分页空间的总的记录数


    repNews.DataSource = nm.Select(pagesize, pageindex, cond);     //这里就是分页控件的使用(取出1个页面的数据,仅仅是1个页面的,非所有的页面数据)

    repNews.DataBind();


     

    分页的函数如下

    /// <summary>分页选择新闻
            /// 
            /// </summary>
            /// <param name="pageSize">页面大小</param>
            /// <param name="pageIndex">页索引</param>
            /// <param name="cond">条件(不用加where)</param>
            /// <returns></returns>
            public DataTable Select(int pageSize, int pageIndex, string cond)
            {
                //执行分页的存储过程  [proc_FenYe]
                DataTable dt = new DataTable();
                string procname = "proc_FenYe";
                SqlParameter[] paras = new SqlParameter[]{
                new SqlParameter("@tblName","(news a inner join  category b on a.caId=b.id and a.caId=b.id)" as object),
                new SqlParameter("@strGetFields","a.id,a.title,a.caid,a.createtime,a.content,b.name" as object),
                new SqlParameter("@strOrder","a.createtime" as object),   //通过time来排序
                new SqlParameter("@strOrderType","desc" as object),
                new SqlParameter("@PageSize ",pageSize as object),
                new SqlParameter("@PageIndex",pageIndex as object),
                new SqlParameter("@strWhere",cond as object)
                };
                dt = new SQLHelper().ExecuteQuery(procname, paras, CommandType.StoredProcedure);
                return dt;
            }
    

    4:设置分页的样式,可以使用拍拍网的样式

    .paginator { font: 11px Arial, Helvetica, sans-serif;padding:10px 20px 10px 0; margin: 0px;}
    .paginator a {padding: 1px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none;margin-right:2px}
    .paginator a:visited {padding: 1px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none;}
    .paginator .cpb {padding: 1px 6px;font-weight: bold; font-size: 13px;border:none}
    .paginator a:hover {color: #fff; background: #ffa501;border-color:#ffa501;text-decoration: none;}

    然后给 anp控件加上  属性设置: CssClass="paginator" CurrentPageButtonClass="cpb"

    5:设置是否为 Url 分页或者是默认的 postback提交,或者是其他的。

    <webdiyer:AspNetPager ID="anp" runat="server" AlwaysShow="True" 
                        FirstPageText="首页" LastPageText="尾页" NextPageText="下一页" PrevPageText="上一页" 
                        CustomInfoHTML="总计%RecordCount%条记录,共%PageCount%页,每页%PageSize%条" 
                        ShowCustomInfoSection="Left" CssClass="paginator" 
                        CurrentPageButtonClass="cpb" CustomInfoSectionWidth="" 
                        onpagechanged="anp_PageChanged"   >
    

    6:切记要双击一下 anp 控件,生成一个  函数,表示当我们点击分页之后,我们要做什么?(实际上就是绑定数据,同第3步骤)

     protected void anp_PageChanged(object sender, EventArgs e)
        {
            BindNews();
        }
    

    大概就这么多就可以了

    但是有以下小的注意事项:

    1:我们在写一般的存储过程的时候,要记得,用 inner join   这个是个好习惯,因为我们一般的存储过程,要转换为 分页的查询的时候,有这个 inner join 就很明显的知道是查询哪几张表

    要使用  ajax 控件的过程

    1:假如,我们的数据是在一个表格的 GridView 或者是 repeater 里面的话,我们就可以把这个表格 或者是 div 的两头加上 UpdatePanel 控件。

    并且在 UpdatePanel 的前面,加上一个  ScriptManager 控件就可以了

    2:假如我们在 ajax控件里面有用到分页控件,那么如果是 postback提交分页,则ajax有效,如果是 url 分页,那么分页就会变成 page=2 这样。

    3:如果是我们自己手写 ajax ,而不是用 系统自带的 ajax控件的话,那么一般是传值给一个  ashx 一般处理程序

    用jquery 这个js控件,可以很好的帮助我们简化操作。

    在用jquery 的时候,如果是get方式,那么要注意 数据的缓存(用url后面加多一个随机的时间来解决)和二次转码,并且 ashx 端接收数据还要进行一次解码

    下面是JS端,分别是 get方式和 post 方式

    //使用 jquery 的ajax 的get方法  需要对字符进行二次转码,并且要考虑 IE缓存的问题  ,并且在服务器的 ashx 页面 要进行解码
                   // var url="../handler/ChangeCaName.ashx?caname="+ encodeURI(encodeURI(newText)) +"&caid="+caid+"&t="+new Date().getTime();            
                   // $.get(url)
                   
                   $.post("../handler/ChangeCaName.ashx", { caname: newText, caid: caid },function(data){
                        if(data=="类别已经存在,修改失败")
                        {
                            alert(data);
                            objSPAN.html(oldcaname);
                        }
                        else
                        {
                            objSPAN.html(newText);
                        }
    
    下面是  ashx 一般处理程序接收端
     // string caname = context.Server.UrlDecode(context.Request.QueryString["caname"]);  ////获取用 juqry的get方式传来的字符串,需要解码
    
            string caname = context.Request.Form["caname"];
    
            bool b = new CategoryManager().IsExists(caname);
            if (!b)
            {
                //开始修改类别
                string id = context.Request.Form["caid"];
    
                Category ca = new Category(id, caname);
    
                new CategoryManager().Update(ca);
    
                context.Response.Write("类别修改成功");
    
            }
            else
            {
                context.Response.Write("类别已经存在,修改失败");
            }
    
  • 相关阅读:
    oracle spatial 类型
    感悟
    给年轻工程师的十大忠告
    美剧
    幸福人生讲座(一):不学礼,无以立
    人成长中须知道的20个故事
    孔子
    毕业五年决定你的一生
    sysindexes表中求SELECT COUNT(*)
    我们应该懂得
  • 原文地址:https://www.cnblogs.com/iceicebaby/p/2373612.html
Copyright © 2020-2023  润新知