熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET存儲過程自定義分頁詳解

2013-11-13 09:57:31  來源: .NET編程 
    */
    */ 出自 編程中國
    */ 作者 hebingbing
    */ 時間 編程論壇首發
    */ 聲明 光看我這麼晚了還在工作轉載這段文字應該保留吧……
    */
    廢話清明節同學回家的回家旅游的旅游……我離家遠是不可能回家了旅游吧不感興趣覺得還不如看一場電影……呵呵從小不喜歡旅游觀光……
    轉入正題大家都知道中的Gridviewdatalist等都可以自定義分頁但是當你翻頁的時候數據表中的所有數據都會加載到內存重新綁定當然要是數據量小的話這是可以的我們也很樂意用原因簡單因為方便但是要是數據量是……在信息爆炸的這個時代海量數據是經常的時那麼這些控件自帶的分頁就顯得有些……
    解決這個問題辦法就是自己動手……不多廢話了看代碼
    首先我是用存儲過程來解決的要弄懂這個問題首先要從存儲過程下手代碼如下
    CREATE proc getdataset
    @TableList Varchar()=*搜索表的字段比如iddatatimejob用逗號隔開
    @TableName Varchar( 搜索的表名
    @SelectWhere Varchar()=搜索條件這裡不用寫where比如job=teacherand class=
    @SelectOrderId Varchar(表主鍵字段名比如id
    @SelectOrder Varchar()= 排序可以使用多字段排序但主鍵字段必需在最前面也可以不寫比如order by class asc
    @intPageNo int= 頁號
    @intPageSize int= 每頁顯示數
    @RecordCount int OUTPUT  總記錄數(存儲過程輸出參數)
    as
    declare @TmpSelect      NVarchar(
    declare @Tmp     NVarchar(
    set nocount on關閉計數
    set @TmpSelect = select @RecordCount = count(*) from +@TableName+ +@SelectWhere
    execute sp_executesql
    @TmpSelect    執行上面的sql語句
    N@RecordCount int OUTPUT    執行輸出數據的sql語句output出總記錄數
    @RecordCount  OUTPUT
    if (@RecordCount = )    如果沒有貼子則返回零
    return
    /*判斷頁數是否正確*/
    if (@intPageNo ) * @intPageSize > @RecordCount   頁號大於總頁數返回錯誤
    return (
    set nocount off打開計數
    if @SelectWhere !=
    begin
    set @TmpSelect = select top +str(@intPageSize)+ +@TableList+ from +@TableName+ where +@SelectOrderId+ not in(select top +str((@intPageNo)*@intPageSize)+ +@SelectOrderId+ from +@TableName+ +@SelectWhere + +@SelectOrder+) and +@SelectWhere + +@SelectOrder
    end
    else
    begin
    set @TmpSelect = select top +str(@intPageSize)+ +@TableList+ from +@TableName+ where +@SelectOrderId+ not in(select top +str((@intPageNo)*@intPageSize)+ +@SelectOrderId+ from +@TableName+ +@SelectOrder++@SelectOrder
    end
    execute sp_executesql @TmpSelect
    return(@@rowcount)
    GO
    其實代碼也很簡單學編程的人基本上都是懂數據庫的這個存儲過程估計不是問題
    其他的代碼我都做了解釋有顏色的那段我沒有解釋我在這裡解釋一下其實也很簡單大家來看
    select top +str((@intPageNo)*@intPageSize)+ +@SelectOrderId+ from +@TableName+ +@SelectWhere + +@SelectOrder+
    這段代碼的執行結果是什麼了是不是當前頁前面的主鍵的集合啊現在我們從所有的表中選出主鍵的值不在這個結果的之內的pagesize個記錄不就是當前頁的內容了嗎?
    aspx頁面就不用再將了吧?我這裡將代碼寫上
    <%@ Page Language=C# AutoEventWireup=true CodeFile=aaaspxcs Inherits=_Default %>
    <!DOCTYPE html PUBLIC //WC//DTD XHTML Transitional//EN transitionaldtd>
    <html xmlns= >
    <head runat=server>
    <title>無標題頁</title>
    </head>
    <body>
    <form id=form runat=server>
    <div>
    <asp:GridView ID=GridView runat=server AutoGenerateColumns=False Height=px Width=px>
    <Columns>
    <asp:BoundField DataField=job_id HeaderText=job_id />
    <asp:BoundField DataField=job_desc HeaderText=job_desc />
    <asp:BoundField DataField=max_lvl HeaderText=max_lxl />
    </Columns>
    </asp:GridView>
    </div>
    <asp:HyperLink ID=hylfirst runat=server>首頁</asp:HyperLink>
    <asp:HyperLink ID=hylprev runat=server>上一頁</asp:HyperLink>
    <asp:HyperLink ID=hylnext runat=server>下一頁</asp:HyperLink>
    <asp:HyperLink ID=hylend runat=server>尾頁</asp:HyperLink>
    第<asp:Label ID=lbRow runat=server Text=Label></asp:Label>頁
    共<asp:Label ID=lbpage runat=server Text=Label></asp:Label>頁共<asp:Label
    ID=lbRecord runat=server Text=Label></asp:Label>條記錄轉到<asp:TextBox ID=txtlink
    runat=server Width=px></asp:TextBox>
    頁<asp:LinkButton ID=link runat=server OnClick=link_Click TabIndex=>轉到</asp:LinkButton>
    </form>
    </body>
    </html>


    cs頁面其實也每頁什麼好講的也就是一些常用的代碼罷了……我把代碼加上大家看看要是有疑問的可以回復我再解釋
    using System;
    using SystemData;
    using SystemConfiguration;
    using SystemCollections;
    using SystemWeb;
    using SystemWebSecurity;
    using SystemWebUI;
    using SystemWebUIWebControls;
    using SystemWebUIWebControlsWebParts;
    using SystemWebUIHtmlControls;
    using SystemDataSqlClient;
    public partial class _Default : SystemWebUIPage
    {
    protected void Page_Load(object sender EventArgs e)
    {
    thisbind()
    }
    protected void link_Click(object sender EventArgs e)
    {
    int page = ConvertToInt(txtlinkText)
    ResponseRedirect(aaaspx?CurrentPage=+page+
    }
    public void bind()
    {
    int sumPage;
    int pageNo = ;
    int pageSize = ;
    if (RequestQueryString[CurrentPage] == null)
    {
    pageNo = ;
    }
    else
    {
    pageNo = IntParse(RequestQueryString[CurrentPage])
    }
    SqlConnection conn = new SqlConnection(ConfigurationManagerAppSettings[ConStr])
    SqlDataAdapter da = new SqlDataAdapter()
    daSelectCommand = new SqlCommand()
    daSelectCommandConnection = conn;
    daSelectCommandCommandText = getdataset;
    daSelectCommandCommandType = CommandTypeStoredProcedure;
    daSelectCommandParametersAdd(@TableList SqlDbTypeVarChar Value = job_idjob_descmax_lvl;
    daSelectCommandParametersAdd(@TableName SqlDbTypeVarChar Value = jobs;
    //daSelectCommandParametersAdd(@SelectWhere SqlDbTypeVarChar Value = where d=;
    daSelectCommandParametersAdd(@SelectOrderId SqlDbTypeVarChar Value = job_id;
    daSelectCommandParametersAdd(@SelectOrder SqlDbTypeVarChar Value = order by min_lvl asc;
    daSelectCommandParametersAdd(@intPageNo SqlDbTypeInt)Value = pageNo;
    daSelectCommandParametersAdd(@intPageSize SqlDbTypeInt)Value = pageSize;
    daSelectCommandParametersAdd(@RecordCount SqlDbTypeInt)Direction = ParameterDirectionOutput;
    daSelectCommandParametersAdd(RowCount SqlDbTypeInt)Direction = ParameterDirectionReturnValue;
    DataSet ds = new DataSet()
    daFill(ds jobs
    GridViewDataSource = ds;
    GridViewDataBind()
    Int RecordCount = (Int)daSelectCommandParameters[@RecordCount]Value; //求出總記錄數該值是output出來的值
    Int RowCount = (Int)daSelectCommandParameters[RowCount]Value;         //求出當前頁中的記錄數在最後一頁不等於pagesize
    lbRecordText = RecordCountToString()
    lbRowText = pageNoToString()
    sumPage = (Int)RecordCount / pageSize;
    if (RecordCount % pageSize >
    {
    sumPage = sumPage + ;
    }
    lbpageText = sumPageToString()
    if (pageNo >
    {
    hylfirstNavigateUrl = aaaspx?CurrentPage=;
    hylprevNavigateUrl = stringConcat(aaaspx?CurrentPage= pageNo
    }
    else
    {
    hylprevNavigateUrl = ;
    hylfirstNavigateUrl = ;
    hylfirstVisible = false;
    hylprevVisible = false;
    }
    if (pageNo < sumPage)
    {
    hylendNavigateUrl = stringConcat(aaaspx?CurrentPage= sumPage)
    hylnextNavigateUrl = stringConcat(aaaspx?CurrentPage= pageNo +
    }
    else
    {
    hylnextNavigateUrl = ;
    hylendNavigateUrl = ;
    hylendVisible = false;
    hylnextVisible = false;
    }
    }
    }
    就這樣吧要是大家有疑問回帖我們再討論在研究……


From:http://tw.wingwit.com/Article/program/net/201311/12114.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.