Ajax学习笔记(1)--分页程序

       最近一段时间一直在看Ajax书籍,但是始终没有真正做过一个属于自己的一个程序,总以为就那回事。其实每个人的想法都是一样,眼高手底的在做事情,每件事件只有动手去做的时候才知道不是想象的那么简单,只要自己动手去做不论做的是好是坏,我想得到的始终是属于自己的东西。自己也会从中受益很多。               这样的程序实现起来很简单,但是当大家开始动手来做的时候,就知道也不是想想的那么简单了。一个是要对编写XSLT文件的语法熟悉,二是对javascript 读取XML的知识也要精通,三是程序的兼容性。还好这些曾经都浏览过。接着把这些技术都整合到一起,呵呵就成了。网上也有很多这样的程序。但是我始终相信自己不论做的是好是坏,只要自己做做来,那就是属于自己的。开始做的时候编写xslt文件时,不小心里面少写了一个字母,把我折腾了半天就是不显示数据,程序和javascript语句都没有问题查来查去就是不知道错误在哪。真够晕的。出去抽了一支烟苦思冥想问题会出在哪呢。然后自己一步一步的排查,把XSLT文件打开一点一点的查,呵呵终于水落石出。改完之后哈哈数据终于肯出来了。   数据显示出来我们就可以处理下一步。数据的分页显示。我采用的是SQL分页,用javascript 异步传输页数和接收数据这种方式最大的好处是实现起来比较简单。但是它的缺点在于每次翻页都要从数据库读取数据。我现在也在尝试着用XSLT文件来控制分页,有知道如何用XSLT文件来控制分页的朋友,不妨说出您的想法,只有集思广益大家才都会受益。 SQL 语句如下
ALTER   PROCEDURE [dbo].[spAll_pagination]

/*名称:spAll_pagination  EXEC spAll_pagination 'SELECT  * FROM 表名', 页号, 返回记录数, '主键', '排序字段'  spAll_ReturnRows 'SELECT  * FROM table',2,10,'[ID]','[ID]' 说明:通用存储过程.分页存储过程..返回指定返回条数、指定页数的记录*/

( @SQL nVARCHAR(4000), 

@Page int, 

@RecsPerPage int, 

@ID VARCHAR(255),

 @Sort VARCHAR(255)

)

AS

DECLARE @Str nVARCHAR(4000)

SET @Str='SELECT   TOP '+CAST(@RecsPerPage AS VARCHAR(20))+' * FROM ('+@SQL+') T WHERE T.'+@ID+' NOT IN (SELECT   TOP '+CAST((@RecsPerPage*(@Page-1)) AS VARCHAR(20))+' '+@ID+' FROM ('+@SQL+') T9 ORDER BY '+@Sort+') ORDER BY '+@Sort

--print @str

EXEC sp_ExecuteSql @Str
javascript 代码如下:
<script language="javascript">

    function Add_Dispose()

    {

            var dispose_feeid=document.getElementById("tb_Disposefee");

            if(dispose_feeid.value=="")

            {

                alert('请填写处理编号');

                dispose_feeid.focus();

                return false;

            }

            var rad_type;

            if(document.getElementById("rad_fee").checked)

            {

                rad_type="费用报销";

            }

            else if(document.getElementById("rad_skkp").checked)

            {

                rad_type="收款开票";

            }

            else if(document.getElementById("rad_FKSP").checked)

            {

                rad_type="付款收票";

            }

            else

            {

                alert('请选择处理类型');

                return false;

            }

           var userid=document.getElementById("hid_userid");

           var DisposeIntro=document.getElementById("tb_disposeintro");

          // alert(rad_type);

           cw_Dispose_Sq.AddDispose(dispose_feeid.value,rad_type,DisposeIntro.value,userid.value,Add_Dispose_callbak);

            

    }

    function Add_Dispose_callbak(response)

    {

        //alert(response.value);

        if(response.value=="0")

        {

            alert('提交成功!');

            var dispose_feeid=document.getElementById("tb_Disposefee");

            dispose_feeid.value="";

            var DisposeIntro=document.getElementById("tb_disposeintro");

            DisposeIntro.value="";

            Dispose_Sel('No');

        }

        else

        {

             alert('提交失败,请重新提交!');

        }

    }

    var pageno=1

    function Dispose_Sel(Type)

    {

      

       //var pagesize=document.getElementById("lb_pagesize");

       var pagesize=document.getElementById("tb_pagesize");

       var count=cw_Dispose_Sq.GetCount(1).value;

       var lb_count=document.getElementById("lb_count");

       var pagecount=Math.ceil(count/pagesize.value);

       //alert(pagecount);

       var lb_pagecount=document.getElementById("lb_pagecount");

       lb_pagecount.innerHTML=pagecount;

       lb_count.innerHTML=count;  

        if(Type=="NEXT")

       {

            if (pageno==pagecount)

            {

                pageno==pagecount;

            }

            else

            {

                pageno=pageno+1;

            }

       }

       else if(Type=="PREV")

       {

            if(pageno==1)

            {

                pageno==1

            }

            else

            {

                pageno=pageno-1;

            }

       }

       else if(Type=="EOF")

       {

            pageno=pagecount;

       }

       else if(Type=="BOF")

       {

            pageno=1;

       }

       else

       {

            pageno=1;

       }

       var lb_page=document.getElementById("lb_page");

       lb_page.innerHTML=pageno;

       cw_Dispose_Sq.GetDispose(parseInt(pageno),pagesize.value,Dispose_Sel_callbak);

    }

    function Dispose_Sel_callbak(response)

    {

         //alert(response.value);

        var xml=response.value;

      //  alert(xml);

        var xmldoc=new ActiveXObject("MSXML2.DOMDocument");

       // alert(xmldoc);

       // alert(xmldoc);

        xmldoc.async=false;

        xmldoc.loadXML(xml);

        var xsldoc=new ActiveXObject("MSXML2.DOMDocument");

        xsldoc.async=false;

        xsldoc.load("../css/dispose.xsl");

        //document.write(xmldoc.transformNode(xsldoc));

      // xml.transformNode(

      var div2=document.getElementById("div2");

      div2.innerHTML=xmldoc.transformNode(xsldoc);

    //  div2.innerHTML(xmldoc.transformNode(xsldoc));

    }

  

  //  function ReturnActive()

  //  {

   //    var arr=new Array("Microsoft.XMLDOM");

   //     for(int i=0;i<arr.length;i++)

   //     {

   //         try

   //         {

   //             var xmldoc=new ActiveXObject(arr[i]);

   //             return xmldoc;

   //             

   //         }

   //         catch()

   //         {

   //             

   //         }

   //     }

   // }

    </script>
后台处理程序:
 [AjaxPro.AjaxMethod]

    public string GetDispose(int pageno, int pagesize)

    {

        my_conn = ofen.ConnOpen();

        SqlCommand my_cmd = new SqlCommand("DD_DisposeSel", my_conn);

        my_cmd.CommandType = CommandType.StoredProcedure;

        SqlParameter my_userid = my_cmd.Parameters.Add("@userid", SqlDbType.VarChar, 50);

        SqlParameter my_pageno = my_cmd.Parameters.Add("@page", SqlDbType.Int);

        SqlParameter my_pagesize = my_cmd.Parameters.Add("@pagesize", SqlDbType.Int);

        my_userid.Value = "ceshi";

        my_pageno.Value =pageno;

        my_pagesize.Value =pagesize;

        SqlDataAdapter my_apter = new SqlDataAdapter(my_cmd);

        DataSet ds=new DataSet();

        my_apter.Fill(ds);

        

        //SqlParameter[] dlist ={

        //    new SqlParameter("@userid",SqlDbType.VarChar,20),

        //    new SqlParameter("@pageno",SqlDbType.Int),

        //    new SqlParameter("@pagesize",SqlDbType.Int)

        //};

        //dlist[0].Value = "ceshi";

        //dlist[1].Value = pageno;

        //dlist[2].Value = pagesize;

        //DataSet ds =null;

        //ds=SqlHelper.RunProcedure("DD_DisposeSel", my_conn, dlist, "dispose");

        return ds.GetXml();

    }

    [AjaxPro.AjaxMethod]

    public int AddDispose(string feeid, string disposetype, string disposeIntro,string userid)

    {

        my_conn = ofen.ConnOpen();

        SqlParameter[] dlist ={

            new SqlParameter("@disposefeeid",SqlDbType.Int),

            new SqlParameter("@disposetype",SqlDbType.VarChar,20),

            new SqlParameter("@disposeIntro",SqlDbType.VarChar,100),

            new SqlParameter("@userid",SqlDbType.VarChar,50),

            new SqlParameter("@ret",SqlDbType.Int)

        };

        dlist[0].Value = Convert.ToInt32(feeid);

        dlist[1].Value = disposetype;

        dlist[2].Value = disposeIntro;

        dlist[3].Value =userid;

        dlist[4].Direction = ParameterDirection.Output;

        SqlHelper.ExecuteProcedure("DD_DisposeAdd", my_conn, dlist);

        int ret = Convert.ToInt32(dlist[4].Value);

        return ret;

    }

    [AjaxPro.AjaxMethod]

    public int GetCount(int page)

    {

        int pagecount=0;

        string sql = "select count(*)as pagecount from dd_DisposeFee where DisposeUser='baojiazhi'";

        SqlDataReader my_dr = ofen.DatajeSq(sql);

        if (my_dr.Read())

        {

            pagecount = Convert.ToInt32(my_dr["pagecount"].ToString());

        }

        else

        {

            pagecount = 0;

        }

        return pagecount;

    }
有时间我会修改一下程序的兼容性,此程序在IE下执行正常,Mozilla 不正常,欣慰Mozilla读取XML语法也IE 不一样。呵呵。有不对或需要改进的地方希望大家多多指出。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值