• 通用SQL分页程序


    近来在网上找了一些分页程序,大部分都是基于SQL存储过程的,在实现上有一定的局限性,其中有一片文章我比较喜欢是基于SQL命令的,但是在实现代码有一点点不合理,我做了一些改进放上来给大家看看,希望能帮得上大家。

     1<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DefaultDataGrid_02.aspx.cs" Inherits="数据分页DEMO_DefaultDataGrid" %>
     2
     3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     4
     5<html xmlns="http://www.w3.org/1999/xhtml" >
     6<head runat="server">
     7    <title>无标题页</title>
     8</head>
     9<body>
    10    <form id="form1" runat="server">
    11    <div>
    12<asp:LinkButton id="lbtnFirst" Font-Size="Smaller" Runat="server" OnClick="lbtnFirst_Click">首頁</asp:LinkButton>
    13<asp:LinkButton id="lbtnBack" Font-Size="Smaller" Runat="server" OnClick="lbtnBack_Click">上頁</asp:LinkButton>
    14<asp:LinkButton id="lbtnNext" Font-Size="Smaller" Runat="server" OnClick="lbtnNext_Click">下頁</asp:LinkButton>
    15<asp:LinkButton id="lbtnLast" Font-Size="Smaller" Runat="server" OnClick="lbtnLast_Click">尾頁</asp:LinkButton>
    16<asp:Label id="Label1" Font-Size="Smaller" runat="server">当前页:</asp:Label>
    17<asp:Label id="lblCurrentPage" Font-Size="Smaller" runat="server">1</asp:Label>
    18<asp:Label id="Label2" Font-Size="Smaller" runat="server">总页:</asp:Label>
    19<asp:Label id="lblPageCount" Font-Size="Smaller" runat="server">200</asp:Label>
    20<asp:Label id="Label3" Font-Size="Smaller" runat="server">跳转:</asp:Label>
    21<asp:TextBox id="txtToPage" Font-Size="Smaller" runat="server" Width="88px"></asp:TextBox>
    22<asp:Button id="btnToPage" Font-Size="Smaller" runat="server" Text="go" OnClick="btnToPage_Click"></asp:Button>
    23
    24<asp:DataGrid id="DataGrid1" runat="server" CellPadding="4" ForeColor="#333333" 
    25     GridLines="None" Font-Bold="False" Font-Italic="False" 
    26     Font-Names="幼圆" Font-Overline="False" Font-Size="Smaller" 
    27     Font-Strikeout="False" Font-Underline="False" HorizontalAlign="Left">
    28    <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
    29    <EditItemStyle BackColor="#7C6F57" />
    30    <SelectedItemStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
    31    <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
    32    <AlternatingItemStyle BackColor="White" />
    33    <ItemStyle BackColor="#E3EAEB" />
    34    <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
    35</asp:DataGrid>
    36
    37
    38    </div>
    39    </form>
    40</body>
    41</html>
    42

      1using System;
      2using System.Data;
      3using System.Configuration;
      4using System.Collections;
      5using System.Web;
      6using System.Web.Security;
      7using System.Web.UI;
      8using System.Web.UI.WebControls;
      9using System.Web.UI.WebControls.WebParts;
     10using System.Web.UI.HtmlControls;
     11using System.Data.SqlClient;
     12using System.Text;
     13public partial class 数据分页DEMO_DefaultDataGrid : System.Web.UI.Page
     14{
     15    protected void Page_Load(object sender, EventArgs e)
     16    {
     17        if (!Page.IsPostBack)
     18        {
     19            ShowData(Convert.ToInt64(this.lblCurrentPage.Text),"报关进度表","运单号","ASC",10);
     20        }

     21    }

     22    private void ShowData(long page,string tableName,string fieldName,
     23                          string orderString,int GridSize)
     24    {
     25
     26
     27        /**/
     28        /*-------------------设置参数------------------*/
     29        //指定要排序的表
     30        //比如报关进度表
     31        string tblName = tableName;
     32        //指定要排序的字段
     33        //比如"运单号,收货公司"
     34        string fldName = fieldName;
     35        //指定要使用的排序方式
     36        //比如ASC DES
     37        string orderStr = orderString;
     38        //指定分页大小
     39        int PageSize = GridSize;
     40
     41        /**/
     42        /*-------------------设置结束------------------*/
     43
     44        string conStr = ConfigurationManager.AppSettings["SQLDB"].ToString();
     45
     46
     47
     48        SqlConnection conn = new SqlConnection(conStr);
     49        conn.Open();
     50        SqlCommand cmd = new SqlCommand("select count(*) from " + tblName, conn);
     51        //得到总页数
     52        lblPageCount.Text = Convert.ToString(((int)cmd.ExecuteScalar() / PageSize + 1));
     53        
     54        //排除的记录部分
     55        StringBuilder TopSql = new StringBuilder();
     56        TopSql.AppendFormat("select top {0} {1} from {2} order by {3} {4}",
     57                           Convert.ToString((page - 1* PageSize),
     58                           fldName, tblName, fldName,orderStr
     59                           );
     60        //得到排除记录里的最大ID号
     61        StringBuilder MaxSql = new StringBuilder();
     62        MaxSql.AppendFormat("select max({0}) from ({1}) as t",fldName,TopSql.ToString());
     63        //得到最终结果
     64        StringBuilder sql = new StringBuilder();
     65        sql.AppendFormat("select top {0} * from {1} where {2}>({3}) order by {4} {5}",
     66                        PageSize.ToString(), tblName, fldName, MaxSql.ToString(), fldName,
     67                        orderStr
     68                        );
     69
     70
     71        if (page == 1
     72        {
     73            sql = new StringBuilder();
     74            sql.AppendFormat("select top {0} * from {1}",
     75                            PageSize,tblName,lblCurrentPage.Text); 
     76        }

     77
     78        try
     79        {
     80            SqlDataAdapter da = new SqlDataAdapter(sql.ToString(), conn);
     81            System.Data.DataSet ds = new DataSet();
     82            da.Fill(ds);
     83            DataGrid1.DataSource = ds.Tables[0].DefaultView;
     84            DataGrid1.DataBind();
     85
     86            conn.Close();
     87
     88        }

     89        catch (Exception ex)
     90        {
     91            Response.Write(ex.Message.ToString());
     92        }

     93
     94    }

     95
     96
     97    protected void lbtnFirst_Click(object sender, EventArgs e)
     98    {
     99        lblCurrentPage.Text = "1";
    100        ShowData(1"报关进度表""运单号""ASC"10);
    101
    102    }

    103    protected void lbtnBack_Click(object sender, EventArgs e)
    104    {
    105        if (lblCurrentPage.Text != "1")
    106        {
    107            lblCurrentPage.Text = Convert.ToString(Convert.ToInt64(lblCurrentPage.Text) - 1);
    108            ShowData(Convert.ToInt64(lblCurrentPage.Text), "报关进度表""运单号""ASC"10);
    109        }

    110    }

    111    protected void lbtnNext_Click(object sender, EventArgs e)
    112    {
    113        if (lblCurrentPage.Text != lblPageCount.Text)
    114        {
    115            lblCurrentPage.Text = Convert.ToString(Convert.ToInt64(lblCurrentPage.Text) + 1);
    116            ShowData(Convert.ToInt64(lblCurrentPage.Text), "报关进度表""运单号""ASC"10);
    117        }

    118
    119    }

    120    protected void lbtnLast_Click(object sender, EventArgs e)
    121    {
    122        lblCurrentPage.Text = lblPageCount.Text;
    123        ShowData(Convert.ToInt64(lblPageCount.Text), "报关进度表""运单号""ASC"10);
    124    }

    125    protected void btnToPage_Click(object sender, EventArgs e)
    126    {
    127        if (Convert.ToInt64(txtToPage.Text.Trim()) > 0 && Convert.ToInt64(txtToPage.Text.Trim()) < Convert.ToInt64(lblPageCount.Text))
    128        {
    129            lblCurrentPage.Text = txtToPage.Text;
    130            ShowData(Convert.ToInt64(txtToPage.Text),"报关进度表""运单号""ASC"10);
    131        }

    132
    133    }

    134}

    135
  • 相关阅读:
    ZOJ-2788 Panic Room 【最小割】
    易采群人工智能
    kaggle 入门比赛:使用随机森林解Bag of Words Meets Bags of Popcorn解题报告
    论Python爬虫与MySQL数据库交互的坑
    使用改良版多值覆盖Dancing link X (舞蹈链)求解aquarium游戏
    使用修改版Dancing link X (舞蹈链)求解aquarium游戏
    使用Chrome无头浏览器获取puzzle team club解谜游戏的谜面
    使用深度优先搜索DFS求解star battle游戏
    使用Dancing link X (舞蹈链)求解dominosa游戏
    参加天池Flink TPC-DS性能优化竞赛实况(docker环境搭建与ubuntu容器内编译篇)
  • 原文地址:https://www.cnblogs.com/chu888chu888/p/631369.html
Copyright © 2020-2023  润新知