手写分页 个人感觉还能优化,甚至抽象出来,需

系统 1838 0

本来就是想来学习下手写分页或者自己写下分页逻辑,就当是一次练习,数据用的是sql2005,数据量是432W。

首先先感谢国家。然后在感谢csdn和群里的朋友跟我一起讨论。当然拉我知道我的做法不是最好的,但是手写一个是挺费劲的。

下面贴代码

          private SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=test;Persist Security Info=True;User ID=sa;Password=123456");

    protected void Page_Load(object sender, EventArgs e)

    {

        //数据显示,跟分页分开操作

            con.Open();

            DataSet ds = new DataSet();

            int num =0;

            if (string.IsNullOrWhiteSpace(Request["page"]) ||Convert.ToInt32(Request["page"])<=1)

            {

                num = 0;

            }

            else

            {

                num =Convert.ToInt32(Request["page"])-1;

            }

            string sql = "select top 20 id,name,sex,age from aa where id not in (select top (20*" + num + ") id from aa order by id desc) order by id desc";

            SqlDataAdapter da = new SqlDataAdapter(sql, con);

            da.Fill(ds, "0");

            con.Close();

            GridView1.DataSource = ds.Tables[0];

            GridView1.DataBind();

    }

    //分页处理

    public string pageIndex()

    {

        int num = 0;//当前页码

        if (string.IsNullOrWhiteSpace(Request["page"]) || Convert.ToInt32(Request["page"]) <= 1)

        {

            num = 1;

        }

        else

        {

            num = Convert.ToInt32(Request["page"]) ;

        }

        //获取到数据库里面的全部数据条数,我没用存储过程用的是sql语句,有的回说存储过程效率高。

        //亲 我测试数据库是432W数据

        //亲 我查询的是一列,

        //亲 最重要的一点是我不会存储过程

        //亲 我知道这么查效率低哦!~但是我只查一次!~

        StringBuilder sb = new StringBuilder();

        con.Open();

        string sql = "select count(id) from aa";

        SqlCommand com = new SqlCommand(sql, con);

        int count = Convert.ToInt32(com.ExecuteScalar());

        con.Close();

        int page = 0;//页总数

        page = (int)Math.Ceiling((decimal) count / 20);

        //int from = num / 10 * 10 + 1;//起始页

        int from = 0;

        int to = 0;
    
           //计算极值

        if (from % 10 == 0)

        {

            int tmp = num - 1;

            from = (tmp / 10) * 10 + 1;

            to = tmp / 10 * 10 + 11;

        }

        else

        {

            to = num / 10 * 10 + 11;//终止页

           from = num / 10 * 10 + 1;

        }



        if (num != 1)

        {

            sb.AppendLine("<a href='?page=" + (num - 1) + "'>上一页</a>");

        }

        else

        {

            sb.AppendLine("<strong>上一页</strong>");

        }

        for (int i = from; i < to && i < page; i++)

        {

            if (i == num)

                sb.AppendLine("<strong>"+i+"</strong>");

            else

                sb.AppendLine("<a href='?page=" + i  + "'>" + i + "</a>");

        }

        if (to - from >= 10)

        {

            sb.AppendLine("<a href='?page=" + (from + 10) + "'>...</a>");

        }

        if (num <= page)

        {

            sb.AppendLine("<a href='?page=" + (num +1) + "'>下一页</a>");

        }

            return sb.ToString();


    

我觉得这个分页还可以优化。当然会有很多人说用存储过程啊!用分页控件啊!

恩。。好吧 但是如果只有几百条数据的时候还需要写存储过程么?如果只让用access呢?我这个速度还是可以的总数 不到1秒就全部读出来了。

 

希望高手能帮忙讲解下 谢谢拉 处女帖!~

手写分页 个人感觉还能优化,甚至抽象出来,需要高手讲解

手写分页 个人感觉还能优化,甚至抽象出来,需要高手讲解

手写分页 个人感觉还能优化,甚至抽象出来,需要高手讲解

 

手写分页 个人感觉还能优化,甚至抽象出来,需要高手讲解


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论