当前位置:编程学习 > C#/ASP.NET >>

gridview动态绑定后分页的问题

我gridview用了动态绑定,主要是多条件改变查询语句,那这样的话要怎么绑定分页?
  string sql = "SELECT * FROM auto_news where 1=1";

 protected void btnss_Click(object sender, EventArgs e)
    {
        if (this.txttimestar.Text != "" && this.txttimeover.Text != "")
        {
            DateTime timestar = Convert.ToDateTime(this.txttimestar.Text);
            DateTime timeover = Convert.ToDateTime(this.txttimeover.Text);
            int i = DateTime.Compare(timestar, timeover);
            if (DateTime.Compare(timestar, timeover) == 1)
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('开始时间不能大于结束时间,请重选!');location.href='newsAdmin.aspx';</script>");
            }
        }
        string aa = sql;
        if (this.txtss.Text.Trim() != "")
            aa += " and newsLong like" + "'%" + txtss.Text.Trim() + "%'";
        if (txtusername.Text.Trim() != "")
            aa += " and userid=(select id from auto_Users where userName=" + "'" + txtusername.Text.Trim() + "'" + ")";
        if (txttimestar.Text != "")
            aa += " and creatTime>=" + "'" + txttimestar.Text + "'";
        if (txttimeover.Text != "")
            aa += " and creatTime<=" + "'" + txttimeover.Text + "'";
        if (Convert.ToInt32(this.drpclass.SelectedValue) > 1)
            aa += " and [auto_news].pid=" + this.drpclass.SelectedValue;
        if (this.drpposition.SelectedIndex > 0)
            aa += " and charindex(" + "'" + this.drpposition.SelectedValue + "'" + " ,htmlposition)>0";
        if (this.drppd.SelectedIndex > 0)
            aa += " and [auto_news].cid=" + drppd.SelectedValue;
        if (this.drpzt.SelectedIndex > 0)
            aa += " and [auto_news].sid=" + drpzt.SelectedValue;

        gridband(aa);
    }

    protected void lbtysh_Click(object sender, EventArgs e)
    {
        String aa = sql + " and [auto_news].ifPost=1";
        gridband(aa);
    }

    protected void gridband(string sql)
    {
        List<Autonew> an = AutonewManager.GetAllAutonewsListBySQL(sql);
        grvnews.DataSource = an;
        grvnews.DataBind();
    }

  protected void grvnews_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView gvw = (GridView)sender;
        if (e.NewPageIndex < 0)
        {
            TextBox pageNum = (TextBox)gvw.BottomPagerRow.FindControl("txtNewPageIndex");
            int Pa = int.Parse(pageNum.Text);
            if (Pa <= 0)
            {
                gvw.PageIndex = 0;
            }
            else
            {
                gvw.PageIndex = Pa - 1;
            }
        }
        else
        {
            gvw.PageIndex = e.NewPageIndex;
        }
        gvw.DataBind();
    }

这样写的话点下一页是没有值。。求高手帮忙解决下。谢谢了 --------------------编程问答-------------------- --------------------编程问答-------------------- 晕什么。。。 --------------------编程问答-------------------- 我一般用PagedDataSource控件来处理分页, 感觉很好用. 可以了解一下.. --------------------编程问答-------------------- 用AspNetPager分页控件吧,挺好 --------------------编程问答--------------------   有没有手动绑定的代码? --------------------编程问答-------------------- 不要一次性取出全部的数据。对操作数据量大的表,这样做是很可怕的 --------------------编程问答-------------------- protected void Page_Load(object sender, EventArgs e)
    {
        webTitle.Text = new MyShare().GetWebTitle();

        //验证Session
        if (!new MyShare().CheckSession(SovellModel.Common.Config.OverTimeString, SovellModel.Common.Config.DefaultLoginPageForMerch, SovellModel.Common.Config.SessionIDForMerch)) return;

        if (!IsPostBack)
        {
            ViewState["pageIndex"] = 1;
            ViewState["pageSize"] = 15; //每页显示15条数据
            BindInfo();
        }

        lbtnSearch.Attributes["onclick"] = "javascript:return CheckSettleSearch(" + txtStartTime.ClientID + "," + txtEndTime.ClientID + ")";
    }
    /// <summary>
    /// 地址栏ID加密
    /// </summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    //public string CryptoID(object obj)
    //{
    //    return EncryptDecrypt.DesEncrypt(obj.ToString(), "");
    //}
    /// <summary>
    /// 前往搜索页
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void lbtnGO_Click(object sender, EventArgs e)
    {
        if (this.txtPageIndex.Text == string.Empty) return;
        if (Convert.ToInt32(txtPageIndex.Text.Trim()) > Convert.ToInt32(ViewState["pCount"]) || Convert.ToInt32(txtPageIndex.Text.Trim()) <= 0)
        {
            return;
        }
        Pager = Convert.ToInt32(txtPageIndex.Text.Trim());
        BindInfo();
    }
    /// <summary>
    /// 首页
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void lbtnFirst_Click(object sender, EventArgs e)
    {
        Pager = 1;
        BindInfo();
    }
    /// <summary>
    /// 上一页
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void lbtnPrev_Click(object sender, EventArgs e)
    {
        --Pager;
        BindInfo();
    }
    /// <summary>
    /// 下一页
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void lbtnNext_Click(object sender, EventArgs e)
    {
        ++Pager;
        BindInfo();
    }
    /// <summary>
    /// 尾页
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void lbtnLast_Click(object sender, EventArgs e)
    {
        Pager = Convert.ToInt32(ViewState["pCount"]);
        BindInfo();
    }
    #region Private Methods
    /// <summary>
    /// 绑定订单信息
    /// </summary>
    private void BindInfo()
    {
        SearchOrderMethod();
        SetNavigateBtnEnable();
        this.ltCount.Text = Convert.ToString(ViewState["rCount"]);
        this.ltPage.Text = ViewState["pageIndex"] + "/" + ViewState["pCount"];
    }
    /// <summary>
    /// 查询订单
    /// </summary>
    private void SearchOrderMethod()
    {
        //验证Session
        if (!new MyShare().CheckSession(UpdatePanel1, SovellModel.Common.Config.OverTimeString, SovellModel.Common.Config.DefaultLoginPageForMerch, SovellModel.Common.Config.SessionIDForMerch)) return;

        int merchid = Convert.ToInt32(Session[SovellModel.Common.Config.SessionIDForMerch]);

        string no = null;
        string starttime = null;
        string endtime = null;
        no = txtNo.Text.Trim();
        if (txtEndTime.Text.Trim() != "")
            endtime = txtEndTime.Text.Trim();
        if (txtStartTime.Text.Trim() != "")
            starttime = txtStartTime.Text.Trim();
        int pageCount = 0;
        int recordCount = 0;
        IList<SH_Settle> settle = SettleBLL.GetSettleInfoByCondition(merchid, no, starttime, endtime, Pager, PagerSize, ref pageCount, ref recordCount);
        ViewState["pCount"] = pageCount;
        ViewState["rCount"] = recordCount;
        this.rpt.DataSource = settle;
        this.rpt.DataBind();
        this.ltCount.Text = Convert.ToString(ViewState["rCount"]);
        this.ltPage.Text = ViewState["pageIndex"] + "/" + ViewState["pCount"];
    }
    /// <summary>
    /// 设置页数
    /// </summary>
    private int Pager
    {
        get { return Convert.ToInt32(ViewState["pageIndex"]); }
        set { ViewState["pageIndex"] = value; }
    }
    /// <summary>
    /// 设置每页显示记录的数量
    /// </summary>
    private int PagerSize
    {
        get { return Convert.ToInt32(ViewState["pageSize"]); }
        set { ViewState["pageSize"] = value; }
    }
    /// <summary>
    /// 设置导航键的Enable
    /// </summary>
    private void SetNavigateBtnEnable()
    {
        lbtnFirst.Enabled = lbtnLast.Enabled = lbtnPrev.Enabled = lbtnNext.Enabled = true;
        int pIndex = Convert.ToInt32(ViewState["pageIndex"]);
        int pCount = Convert.ToInt32(ViewState["pCount"]);
        int rCount = Convert.ToInt32(ViewState["rCount"]);
        if (Convert.ToInt32(ViewState["pCount"]) == 1)
        {
            lbtnFirst.Enabled = lbtnPrev.Enabled = lbtnLast.Enabled = lbtnNext.Enabled = false;
        }
        else if (pIndex == 1)
        {
            lbtnFirst.Enabled = lbtnPrev.Enabled = false;
        }
        else if (pIndex == pCount)
        {
            lbtnLast.Enabled = lbtnNext.Enabled = false;
        }
    }
    #endregion
    /// <summary>
    /// 搜索
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void lbtnSearch_Click(object sender, EventArgs e)
    {
        Pager = 1;
        SearchOrderMethod();
        SetNavigateBtnEnable();
    } --------------------编程问答-------------------- 利用linq的Skip(),Take()可实现
int pageIndex=当前页索引
int pageSize=每页显示的条数
假设list为你的数据源
var pageList=list.Skip((pageIndex-1)*pageSize).Take(pageSize);
--------------------编程问答-------------------- LZ是想用gridView自身的分页 ?

好像有个pageIndexChanging的事件
然后里面可以
this.gvXX.PageIndex = e.NewPageIndex;
dataBind();

如果是分页控件。。那你随意~ --------------------编程问答--------------------
引用 4 楼 aluogang 的回复:
用AspNetPager分页控件吧,挺好

正解! --------------------编程问答-------------------- <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" CellPadding="0" CssClass="gv" EmptyDataText="<span class='msg'>暂无任何玩家信息</span>" PageSize="20" Width="100%" DataKeyNames="UserID" OnPageIndexChanging="GridView1_PageIndexChanging">
</asp:GridView>


cs代码中写GridView1_PageIndexChanging事件
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        this.GridView1.PageIndex = e.NewPageIndex;
        GridView1.DataSource = 数据绑定;
        GridView1.DataBind();
    } --------------------编程问答-------------------- 点击看这个问题 --------------------编程问答-------------------- 个人觉得分页还是用存储过程比较好
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,