none
aspnetpager分页控件使用通用分页存储过程的参数赋值问题 RRS feed

  • 问题


  • 用datalist显示数据 datalist控件通过sqldatasource绑定存储过程  Aspnetpager分页

    但是不晓得在CS页面怎样给存储过程中的各个查询条件参数赋值


    页面代码如下:

    <asp:DataList ID="DataList1" runat="server" DataSourceID="SqlDataSource1" RepeatColumns="4" RepeatDirection="Horizontal">
               <ItemTemplate>
                   
                      <img class="wbshow_img" src='<%# "ThemeImage/"+Eval("Photo") %>' />
                        
                       <a href="#"><%# Eval("tagName").ToString() %> -<%# Eval("themeName").ToString().Length > 15 ? Eval("themeName").ToString().Substring(0, 15) + "..." :                                Eval("themeName")%></a>
                                         
                      <asp:Label ID="Label1" runat="server" Text='<%# Eval("themeUptime", "{0:d}") %>'></asp:Label>                   
                             
                </ItemTemplate>
    </asp:DataList>                   
                                   
                    <webdiyer:AspNetPager ID="AspNetPager1" runat="server" 
                        PageIndexBoxType="TextBox" ShowPageIndexBox="Never" SubmitButtonText="Go" 
                        TextAfterPageIndexBox="页" TextBeforePageIndexBox="转到" PageSize="5">
                    </webdiyer:AspNetPager>
                           
    //绑定存储过程    
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
              ConnectionString="<%$ ConnectionStrings:WebConn %>"           
              SelectCommand="Ture_Page" SelectCommandType="StoredProcedure">
    <SelectParameters>       
            <asp:ControlParameter Name="PageSize" Type="Int32" ControlID="AspNetPager1" PropertyName="PageSize" />
            <asp:ControlParameter Name="PageIndex" Type="Int32" ControlID="AspNetPager1" PropertyName="StartRecordIndex" />               
    </SelectParameters>
    </asp:SqlDataSource>
    //查询一ID,统计数据总数
    <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
            ConnectionString="<%$ ConnectionStrings:WebConn %>" 
            SelectCommand="SELECT [ID] FROM [v_themeinfo]">
    </asp:SqlDataSource>  

    -----------------------------------------------------------------------------

    通用分页过程有以下参数:
        @PageSize    int,        --每页的行数
        @PageIndex    int,        --1 代表第一页
        @Col        varchar(250),    --要显示的字段
        @Table        varchar(200),    --所用到的表,复条的话就写from与where之间的内容
        @Where    varchar(200)='',    --所用到的条件
        @OKey        varchar(50),    --排序字段
        @Order        varchar(20)='ASC'   --排序方式

    ----------------------------------------------------------------------------

    CS代码:

    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Data.SqlClient; 

    public partial class WB : System.Web.UI.Page
    {
       
        protected void Page_Load(object sender, EventArgs e)
        {
              
           if(!IsPostBack)
           {
               //this.AspNetPager1.RecordCount = (SqlDataSource2.Select(DataSourceSelectArguments.Empty) as DataView).Count;
               //cmd = new SqlCommand("Ture_Page",);
               //cmd.Parameters.Add("@Col", "ID,themeName,themeUptime,Photo,themeDownloads,themeID,tagName");
               //cmd.Parameters.Add("@Table", "v_themeinfo");
               //cmd.Parameters.Add("@Where","@themeID=themeID");
               //cmd.Parameters.Add("@OKey", "themeUptime");
               //cmd.Parameters.Add("@Order","desc");
                自己乱写了一通,也不晓得杂把条件赋给参数
                请高手们帮帮忙,平时上课少了,毕业设计要交了,急死了。
           }
           
        }
    }

    2009年5月9日 8:48

答案

  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.SqlClient;
    
    public partial class HTML_CSS_JAVASCRIPT_X200905091850 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                this.BindGrid();
        }
    
        private void BindGrid()
        {
            int fPageSize = 20;
            int fPageIndex = this.AspNetPager1.CurrentPageIndex;
            string fCol = "ID,themeName,themeUptime,Photo,themeDownloads,themeID,tagName";
            string fTable = "v_themeinfo";
            string fWhere = "themeID = 2";
            string fOkey = "themeUptime";
            string fOrder = "ASC";
    
            string fConnectionString = "连接字符串";
    
            SqlCommand fSqlCommand = new SqlCommand("存储过程名");
            fSqlCommand.CommandType = CommandType.StoredProcedure;
    
            fSqlCommand.Parameters.AddRange(new SqlParameter[] { 
                new SqlParameter("@PageSize", fPageSize),
                new SqlParameter("@PageIndex", fPageIndex),
                new SqlParameter("@Col", fCol),
                new SqlParameter("@Table", fTable),
                new SqlParameter("@Where", fWhere),
                new SqlParameter("@OKey", fOkey),
                new SqlParameter("@Order", fOrder)
            });
    
            using (SqlDataAdapter fAdapter = new SqlDataAdapter("存储过程名", "连接字符串"))
            {
                fAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
                fAdapter.SelectCommand.Parameters.AddRange(new SqlParameter[] { 
                    new SqlParameter("@PageSize", fPageSize),
                    new SqlParameter("@PageIndex", fPageIndex),
                    new SqlParameter("@Col", fCol),
                    new SqlParameter("@Table", fTable),
                    new SqlParameter("@Where", fWhere),
                    new SqlParameter("@OKey", fOkey),
                    new SqlParameter("@Order", fOrder)
                });
    
                DataSet fDataSet = new DataSet();
                fAdapter.Fill(fDataSet, (fPageIndex - 1) * fPageSize, fPageSize, "table1");
    
                this.AspNetPager1.RecordCount = this.DataSourceRowCount(2);
                GridView1.DataSource = fDataSet.Tables[0];
                GridView1.DataBind();
            }
        }
    
        private void DataSourceRowCount(int themeID)
        {
            string fCommandText = string.Format("SELECT COUNT(*) FROM v_themeinfo WHERE themeID = {0}", themeID);
        }
    
        protected void AspNetPager1_PageChanged(object sender, EventArgs e)
        {
            BindGrid();
        }
    }
    
    

    知识改变命运,奋斗成就人生!
    • 已标记为答案 斌斌NO1 2009年5月9日 15:20
    2009年5月9日 15:07
    版主

全部回复

  • 网上关于 AspNetPager 的用法介绍有很多,你可以多参考一下。另外 AspNetPage 主要是用DataAdapter.Fill(DataSet, StartIndex, Count, TableName) 来实现分页,所以你不用存储过程也能实现分页
    知识改变命运,奋斗成就人生!
    2009年5月9日 11:09
    版主
  • 老师您说的,我看了下,还是比较复杂。

    您可以教我怎样赋值给参数么,

    在网上也查了好久,都没有头绪,只有上这儿求解了

    2009年5月9日 14:30
  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.SqlClient;
    
    public partial class HTML_CSS_JAVASCRIPT_X200905091850 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                this.BindGrid();
        }
    
        private void BindGrid()
        {
            int fPageSize = 20;
            int fPageIndex = this.AspNetPager1.CurrentPageIndex;
            string fCol = "ID,themeName,themeUptime,Photo,themeDownloads,themeID,tagName";
            string fTable = "v_themeinfo";
            string fWhere = "themeID = 2";
            string fOkey = "themeUptime";
            string fOrder = "ASC";
    
            string fConnectionString = "连接字符串";
    
            SqlCommand fSqlCommand = new SqlCommand("存储过程名");
            fSqlCommand.CommandType = CommandType.StoredProcedure;
    
            fSqlCommand.Parameters.AddRange(new SqlParameter[] { 
                new SqlParameter("@PageSize", fPageSize),
                new SqlParameter("@PageIndex", fPageIndex),
                new SqlParameter("@Col", fCol),
                new SqlParameter("@Table", fTable),
                new SqlParameter("@Where", fWhere),
                new SqlParameter("@OKey", fOkey),
                new SqlParameter("@Order", fOrder)
            });
    
            using (SqlDataAdapter fAdapter = new SqlDataAdapter("存储过程名", "连接字符串"))
            {
                fAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
                fAdapter.SelectCommand.Parameters.AddRange(new SqlParameter[] { 
                    new SqlParameter("@PageSize", fPageSize),
                    new SqlParameter("@PageIndex", fPageIndex),
                    new SqlParameter("@Col", fCol),
                    new SqlParameter("@Table", fTable),
                    new SqlParameter("@Where", fWhere),
                    new SqlParameter("@OKey", fOkey),
                    new SqlParameter("@Order", fOrder)
                });
    
                DataSet fDataSet = new DataSet();
                fAdapter.Fill(fDataSet, (fPageIndex - 1) * fPageSize, fPageSize, "table1");
    
                this.AspNetPager1.RecordCount = this.DataSourceRowCount(2);
                GridView1.DataSource = fDataSet.Tables[0];
                GridView1.DataBind();
            }
        }
    
        private void DataSourceRowCount(int themeID)
        {
            string fCommandText = string.Format("SELECT COUNT(*) FROM v_themeinfo WHERE themeID = {0}", themeID);
        }
    
        protected void AspNetPager1_PageChanged(object sender, EventArgs e)
        {
            BindGrid();
        }
    }
    
    

    知识改变命运,奋斗成就人生!
    • 已标记为答案 斌斌NO1 2009年5月9日 15:20
    2009年5月9日 15:07
    版主
  • 大概是这样的,你根据实际情况修改一下
    知识改变命运,奋斗成就人生!
    2009年5月9日 15:08
    版主
  • 真是太感谢老师!
    • 已标记为答案 斌斌NO1 2009年5月9日 15:20
    • 取消答案标记 斌斌NO1 2009年5月9日 15:20
    2009年5月9日 15:16