表名:restaurant.字段:Id,ResName,Tag1,Tag2.
4个类:sqlhelper.cs(这个我用微软的,就不贴代码了),restaurant.cs(就等于三层架构的模型层,字段就是表的4个字段),dal_restaurant.cs,bll.restaurant.cs.dal_restaurant.cs代码如下
    /// <summary>
    /// 按ResName查询餐馆总数
    /// </summary>
    ///
    public int GetCount_ResName(string ResName)
    {
        SqlParameter[] cmdParms ={
            new SqlParameter("@ResName",SqlDbType.VarChar),
        };
        cmdParms[0].Value = ResName;
        using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionStringLocalTransaction))
        {
            int count = int.Parse(SqlHelper.ExecuteScalar(conn, CommandType.StoredProcedure, "count_res_ResName", cmdParms).ToString());
            return count;
        }
    }
    /// <summary>
    /// 按ResName查询餐馆列表
    /// </summary>
    ///
    public List<restaurant> page_res_ResName(string ResName, int startIndex, int endIndex)
    {
        SqlParameter[] cmdParms ={
            new SqlParameter("@ResName",SqlDbType.VarChar),
            new SqlParameter("@startIndex",SqlDbType.Int),
            new SqlParameter("@endIndex",SqlDbType.Int)
        };
        cmdParms[0].Value = ResName;
        cmdParms[1].Value = startIndex;
        cmdParms[2].Value = endIndex ;
        List<restaurant> list = new List<restaurant>();
        SqlDataReader reader = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.StoredProcedure, "page_res_ResName", cmdParms);
        while (reader.Read())
        {
            restaurant res = new restaurant();
            res.Id = int.Parse(reader["Id"].ToString());
            res.ResName = reader["ResName"].ToString();
            res.Tag1 = reader["Tag1"].ToString();
            res.Tag2 = reader["Tag2"].ToString();
            list.Add(res);
        }
        reader.Dispose();
        return list;
    }    /// <summary>
    /// 分页获取餐馆列表(不带条件)
    /// </summary>
    /// 
    public List<restaurant> GetAllRes(int startIndex, int endIndex)
    {
        SqlParameter[] cmdParms ={
               new SqlParameter("@startIndex",SqlDbType.Int),
               new SqlParameter("@endIndex",SqlDbType.Int)
           };
        cmdParms[0].Value = startIndex;
        cmdParms[1].Value = endIndex;
        List<restaurant> list = new List<restaurant>();
        SqlDataReader reader = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.StoredProcedure, "page", cmdParms);
        while (reader.Read())
        {
            restaurant res = new restaurant();
            res.Id = int.Parse(reader["Id"].ToString());
            res.ResName = reader["ResName"].ToString();
            res.Tag1 = reader["Tag1"].ToString();
            res.Tag2 = reader["Tag2"].ToString();
            list.Add(res);
        }
        reader.Dispose();
        return list;
    }
    /// <summary>
    /// 所有餐馆总数(不带条件)
    /// </summary>
    /// 
    public int GetCount()
    {        using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionStringLocalTransaction))
        {
            int count = int.Parse(SqlHelper.ExecuteScalar(conn, CommandType.StoredProcedure, "count_res", null).ToString());
            return count;
        }
    }
bll_restaurant.cs代码如下:    /// <summary>
    /// 所有餐馆总数
    /// </summary>
    public int GetCount()
    {
        return res.GetCount();
    }    /// <summary>
    /// 分页获取餐馆列表
    /// </summary>
    public List<restaurant> GetAllRes(int startIndex, int endIndex)
    {
        return res.GetAllRes(startIndex, endIndex);
    }     /// <summary>
    /// 按ResName查询餐馆总数
    /// </summary>
    ///    public int GetCount_ResName(string ResName)
    {
        return res.GetCount_ResName(ResName);
    }     /// <summary>
    /// 按ResName查询餐馆列表
    /// </summary>
    ///
    public List<restaurant> page_res_ResName(string ResName, int startIndex, int endIndex)
    {
        return res.page_res_ResName(ResName, startIndex, endIndex);
    }default.aspx代码:
   bll_restaurant bll_res = new bll_restaurant();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            int totalPage = bll_res.GetCount();
            AspNetPager1.RecordCount = totalPage;
            bindData();
        }
        else
        {
                int totalPage = bll_res.GetCount_ResName(txtResName.Text);
                AspNetPager1.RecordCount = totalPage;
                bindData_ResName();
        }
    }
    protected void btnResName_Click(object sender, EventArgs e)
    {
        Response.Redirect(string.Format("Default.aspx?ResName={0}", this.txtResName.Text));
       
    }
    //绑定所有餐馆
    void bindData()
    {
        DataList1.DataSource = bll_res.GetAllRes(AspNetPager1.StartRecordIndex, AspNetPager1.EndRecordIndex);
        DataList1.DataBind();
    }    //绑定ResName餐馆
     void bindData_ResName()
    {
        DataList1.DataSource = bll_res.page_res_ResName(this.txtResName.Text, AspNetPager1.StartRecordIndex, AspNetPager1.EndRecordIndex);
        DataList1.DataBind();
    }
    protected void AspNetPager1_PageChanged(object sender, EventArgs e)
    {
        if (txtResName.Text!="")
        {
            bindData_ResName();
        }
        else
        {
            bindData();
        }
    }现在我加载页面是正常地显示所有数据,并能正常分页。
但我在txtResName文本框输入条件后,显示数据依然没变,请问原因。

解决方案 »

  1.   

    存储过程如下,page,count_res,count_res_ResName,page_res_ResName
    我是用此控件直接生成的存储过程page:
    ALTER procedure page 
    (@startIndex int,
    @endIndex int)
    as
    set nocount on
    begin
    declare @indextable table(id int identity(1,1),nid int)
    set rowcount @endIndex
    insert into @indextable(nid) select Id from restaurant  order by Id asc
    select O.Id,O.ResName,O.Tag1,O.Tag2 from restaurant O,@indextable t where O.Id=t.nid
    and t.id between @startIndex and @endIndex order by t.id
    end
    set nocount off
    count_res:
    ALTER PROCEDURE count_res
    AS
    select count(*)from restaurant
    RETURNcount_res_ResName:
    ALTER PROCEDURE count_res_ResName
    (
    @ResName varchar(50)
    )

    AS
    select count(*)from restaurant where ResName like '%@ResName%'
    RETURNpage_res_ResName:
    ALTER procedure page_res_ResName 
    (@ResName  VarChar(50),
    @startIndex int,
    @endIndex int)
    as
    set nocount on
    begin
    declare @indextable table(id int identity(1,1),nid int)
    set rowcount @endIndex
    insert into @indextable(nid) select Id from restaurant  where resname like '%@resname%' order by Id desc
    select O.Id,O.ResName,O.Tag1,O.Tag2 from restaurant O,@indextable t where O.Id=t.nid
    and t.id between @startIndex and @endIndex order by t.id
    end
    set nocount off
      

  2.   

    我知道是default.aspx后台代码有问题,但不知道怎么改,请朋友们帮帮忙,我做了好几天了,都不能按某一条件查询分页