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

求助:ASP.net Repeater控件分页排序!

ASP.net Repeater控件分页排序!现在是分页后不排序。。。 好几天了。。 都没弄出来。。  ASP.NET 分页 控件 排序 --------------------编程问答-------------------- 排序也要用ViewState[]来存储 --------------------编程问答-------------------- http://fineui.com/demo/#/demo/grid/grid_paging_sorting.aspx --------------------编程问答--------------------
引用 2 楼 liuchaolin 的回复:
http://fineui.com/demo/#/demo/grid/grid_paging_sorting.aspx


是用了ViewState  

可是我不知道该怎么分页! --------------------编程问答--------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
using System.Text;
using System.Web.UI.HtmlControls;
using Model;

namespace ShowData
{
    public partial class Default : System.Web.UI.Page
    {

        //连接字符串
        string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
        string sqlStr = "select * from T_Collect";

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindRepeater();
                ShowData.DataSource = pds(sqlStr);
                ShowData.DataBind();
                
            }
        }

        private DataView GetData
        {
            get
            {
                return Cache["_data"] as DataView;
            }
            set
            {
                if (Cache["_data"] == null)
                    Cache["_data"] = value;
            }
        }

        private SqlConnection Conn()
        {
            return new SqlConnection(connStr);
        }

        private void BindRepeater()
        {
            DataSet ds = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter("Select * from T_Collect ", Conn());
            da.Fill(ds, "T_Collect");

            GetData = ds.Tables[0].DefaultView;
            ShowData.DataSource = ds.Tables[0];
            ShowData.DataBind();
        }

        private void Bind(string sqlStr)
        {
            SqlConnection con = new SqlConnection(connStr);
            con.Open();
            SqlCommand cmd = new SqlCommand(sqlStr, con);
            SqlDataAdapter sda = new SqlDataAdapter();
            sda.SelectCommand = cmd;
            DataSet ds = new DataSet();
            sda.Fill(ds, "T_Collect");

            //创建PagedDataSource
            PagedDataSource pds = new PagedDataSource();
            pds.DataSource = ds.Tables["T_Collect"].DefaultView;

            //设置PagedDataSource分页属性
            pds.AllowPaging = true;
            pds.PageSize = 5;
            pds.CurrentPageIndex = Convert.ToInt32(Request.QueryString["page"]);

            ShowData.DataSource = pds;

            ShowData.DataBind();

            if (ds.Tables[0].Rows.Count == 0)
            {
                lblError.Visible = true;
                panelPage.Visible = false;
            }
            else
            {
                panelPage.Visible = true;
                lblError.Visible = false;
            }
        }

        //获得PagedDataSource
        public PagedDataSource pds(string sqlStr)
        {
            //获取数据集
            SqlConnection con = new SqlConnection(connStr);
            con.Open();
            SqlCommand cmd = new SqlCommand(sqlStr, con);
            SqlDataAdapter sda = new SqlDataAdapter();
            sda.SelectCommand = cmd;
            DataSet ds = new DataSet();
            sda.Fill(ds, "T_Collect");

            //创建PagedDataSource
            PagedDataSource pds = new PagedDataSource();
            pds.DataSource = ds.Tables["T_Collect"].DefaultView;

            //设置PagedDataSource分页属性
            pds.AllowPaging = true;
            pds.PageSize = 5;
            pds.CurrentPageIndex = Convert.ToInt32(Request.QueryString["page"]);
            return pds;
        }

        protected void ShowData_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Header)
            {
                LinkButton lkbtnSort = (LinkButton)e.Item.FindControl(e.CommandName.Trim());
                if (ViewState[e.CommandName.Trim()] == null)
                {
                    ViewState[e.CommandName.Trim()] = "ASC";
                    lkbtnSort.Text = lkbtnSort.Text + "▲";
                }
                else
                {
                    if (ViewState[e.CommandName.Trim()].ToString().Trim() == "ASC")
                    {
                        ViewState[e.CommandName.Trim()] = "DESC";
                        if (lkbtnSort.Text.IndexOf("▲") != -1)
                            lkbtnSort.Text = lkbtnSort.Text.Replace("▲", "▼");
                        else
                            lkbtnSort.Text = lkbtnSort.Text + "▼";
                    }
                    else
                    {
                        ViewState[e.CommandName.Trim()] = "ASC";
                        if (lkbtnSort.Text.IndexOf("▼") != -1)
                            lkbtnSort.Text = lkbtnSort.Text.Trim().Replace("▼", "▲");
                        else
                            lkbtnSort.Text = lkbtnSort.Text + "▲";
                    }
                }
                ViewState["text"] = lkbtnSort.Text;
                ViewState["id"] = e.CommandName.Trim();
                DataView dv = GetData;
                dv.Sort = e.CommandName.ToString().Trim() + " " + ViewState[e.CommandName.Trim()].ToString().Trim();
                ShowData.DataSource = dv;
                ShowData.DataBind();
            }
        }

        //Repeater绑定事件
        protected void rpShow_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            SqlConnection con = new SqlConnection(connStr);
            con.Open();
            SqlDataAdapter dbAdapter = new SqlDataAdapter(sqlStr, connStr);
            DataSet ds = new DataSet();
            dbAdapter.Fill(ds);

            Data data = new Data();
            string url = data.Arturl;
            string name = data.Artname;
            string path = "/PDF/";

            if (e.Item.ItemType == ListItemType.Header)
            {
                if (ViewState["id"] != null)
                {
                    LinkButton lkbtnSort = (LinkButton)e.Item.FindControl(ViewState["id"].ToString().Trim());
                    lkbtnSort.Text = ViewState["text"].ToString();
                }
            }

            if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
            {
                HyperLink hlArtUrl = (HyperLink)e.Item.FindControl("hlArtUrl");
                HyperLink hlArtName = (HyperLink)e.Item.FindControl("hlArtName");
                HtmlGenericControl artDiv = (HtmlGenericControl)e.Item.FindControl("artDiv");
                HtmlGenericControl readOne = (HtmlGenericControl)e.Item.FindControl("readOne");
                HtmlGenericControl readMore = (HtmlGenericControl)e.Item.FindControl("readMore");

                string artUrl = hlArtUrl.Text;
                string artName = hlArtName.Text;
                int artUrlLen = artUrl.Length;

                if (artUrlLen > 30)
                {
                    readOne.Visible = false;
                    readMore.Visible = true;

                    string[] Url = artUrl.Split(new char[1] { '|' });
                    string[] Name = artName.Split(new char[1] { '|' });

                    for (int i = 0; i < Url.Length - 1; i++)
                    {
                        HtmlAnchor ha = new HtmlAnchor();

                        url = path + Url[i].ToString();
                        name = Name[i].ToString();

                        ha.HRef = url;
                        ha.InnerText = name;

                        artDiv.Controls.Add(ha);

                        Literal artltl = new Literal();
                        artltl.Text = "<br/><br/>";
                        artDiv.Controls.Add(artltl);
                    }
                }
                else
                {
                    readMore.Visible = false;
                    readOne.Visible = true;
                }
            }

            if (e.Item.ItemType == ListItemType.Footer)
            {

                //获得各分页所用到的控件
                Label lblCurrentPage = (Label)e.Item.FindControl("lblCurrentPage");
                Label lblPageCount = (Label)e.Item.FindControl("lblPageCount");
                HyperLink hlFirst = (HyperLink)e.Item.FindControl("hlFirst");
                HyperLink hlPrevious = (HyperLink)e.Item.FindControl("hlPrevious");
                HyperLink hlNext = (HyperLink)e.Item.FindControl("hlNext");
                HyperLink hlLast = (HyperLink)e.Item.FindControl("hlLast");

                //当前页码和总页数
                int pagecount = pds(sqlStr).PageCount;
                int currentpage = pds(sqlStr).CurrentPageIndex;

                //当前页为第一页时的设置
                if (currentpage <= 0)
                {
                    hlFirst.Enabled = false;
                    hlPrevious.Enabled = false;
                    hlNext.Enabled = true;
                    hlLast.Enabled = true;
                }
                else
                {
                    hlPrevious.NavigateUrl = "?page=" + (currentpage - 1);
                }

                //当前页为尾页时的设置
                if (currentpage >= pagecount - 1)
                {
                    hlFirst.Enabled = true;
                    hlPrevious.Enabled = true;
                    hlNext.Enabled = false;
                    hlLast.Enabled = false;
                }
                else
                {
                    hlNext.NavigateUrl = "?page=" + (currentpage + 1);
                }

                //第一页和最后一页设置
                hlFirst.NavigateUrl = "?page=0";
                hlLast.NavigateUrl = "?page=" + (pagecount - 1);

                //页码和总数显示
                lblCurrentPage.Text = (currentpage + 1).ToString();
                lblPageCount.Text = pagecount.ToString();

            }

        }
    }
}
--------------------编程问答--------------------        public DataSet GetinfoList(string table, int pageindex, int pagesize, string orderFid, string Conditions, string[] strparam, object[] strval)
       {

           string query = "Select top {0} * From "
               + "(Select *,ROW_NUMBER() OVER(ORDER BY {2}) as RowNum From {4} {3}) as newTable "
               + "Where (RowNum > {1} )";
           query = string.Format(query, pagesize, (pageindex - 1) * pagesize, orderFid, Conditions, table);

           //string query = "Select top {0} * From {1} {2} and id not in(Select top {3} id From {1} {2} Order by {4}) Order by {4}";
           //query = string.Format(query, rowcount, table, Conditions, (rowpage - 1) * rowcount + 1, orderFid);
           return db.GetDataSet(query, strparam, strval);

       } --------------------编程问答--------------------
引用 5 楼 liuchaolin 的回复:
public DataSet GetinfoList(string table, int pageindex, int pagesize, string orderFid, string Conditions, string[] strparam, object[] strval)
       {

           string query = "Select top ……
您看下我的代码,具体应该怎么做?我是新手。谢谢你。 --------------------编程问答-------------------- Convert.ToInt32(Request.QueryString["page"]); 

分页你用这个?
用url传值的话ViewState  是不启效的,如果非要这么干,那么你的排序也要用url来传 --------------------编程问答--------------------
引用 7 楼 liuchaolin 的回复:
Convert.ToInt32(Request.QueryString["page"]); 

分页你用这个?
用url传值的话ViewState  是不启效的,如果非要这么干,那么你的排序也要用url来传


怎么写呢? --------------------编程问答-------------------- 建议你使用AspNetPager 控件+repater  分页 . --------------------编程问答-------------------- 如果会用那个AspNetPager就可以了,百度里面搜这个排序就ok --------------------编程问答--------------------
引用 9 楼 forever_code 的回复:
建议你使用AspNetPager 控件+repater  分页 .
可以实现排序后分页吗? --------------------编程问答--------------------
引用 10 楼 LMAOhuaNL 的回复:
如果会用那个AspNetPager就可以了,百度里面搜这个排序就ok
可以实现排序后分页吗? --------------------编程问答--------------------
AspNetPager1.RecordCount = recordCount;
            rptList.DataSource = dtList;
            rptList.DataBind();

以上是AspNetPager控件的基本绑定 .至于什么排序后 绑定 ,这个给你的查询语句加个排序 就ok了.
--------------------编程问答--------------------
引用 8 楼 ls920127 的回复:
引用 7 楼 liuchaolin 的回复:
Convert.ToInt32(Request.QueryString["page"]); 

分页你用这个?
用url传值的话ViewState  是不启效的,如果非要这么干,那么你的排序也要用url来传

怎么写呢?


在排序事件那里写
location.href="xxx.apx?order="+ 排序字段+"&acs="+ 1或者0

然后读取Request.QueryString["order"]和Request.QueryString["acs"] --------------------编程问答--------------------
引用 14 楼 liuchaolin 的回复:
引用 8 楼 ls920127 的回复:
引用 7 楼 liuchaolin 的回复:
Convert.ToInt32(Request.QueryString["page"]); 

分页你用这个?
用url传值的话ViewState  是不启效的,如果非要这么干,那么你的排序也要用url来传

怎么写呢?

在排序事件那里写
location.href="xxx.apx?or……
不行呀,,,,额 --------------------编程问答-------------------- --------------------编程问答-------------------- 你的代码不见有排序事件这部份的啊 --------------------编程问答-------------------- 有的。你好好看看。还有,这个问题刚才我自己解决掉了。


其实就是在把DataView也设置分页就OK了。


谢谢大家! --------------------编程问答-------------------- 创建两个可以点击上下页的按钮,然后调用点击事件,把ViewState[]进行加页,减页 --------------------编程问答-------------------- 楼主能把最终代码粘一下吗?同是新手,学习用! --------------------编程问答-------------------- 求教:刚开始配置web服务器站点,再旧服务器做实验。由于服务器更换了IP地址,需要改哪儿来重新绑定新的IP地址并发布呢 --------------------编程问答--------------------
引用 11 楼 ls920127 的回复:
引用 9 楼 forever_code 的回复:建议你使用AspNetPager 控件+repater  分页 .可以实现排序后分页吗?

为什么会纠结 排序后分页 这种说法。。
排序要重新绑定。分页也要重新绑定,2个独立的东西。关键点是你怎么获取正确的数据源绑定到控件上 --------------------编程问答-------------------- 分页我们一般不用系统的那个控件。直接写存储过程来执行。 --------------------编程问答-------------------- http://www.webdiyer.com/controls/aspnetpager --------------------编程问答--------------------
引用 22 楼 xiaogui340 的回复:
引用 11 楼 ls920127 的回复:引用 9 楼 forever_code 的回复:建议你使用AspNetPager 控件+repater  分页 .可以实现排序后分页吗?
为什么会纠结 排序后分页 这种说法。。
排序要重新绑定。分页也要重新绑定,2个独立的东西。关键点是你怎么获取正确的数据源绑定到控件上


没错,关键是你数据持久层的分页方法,或者是你取出数据后也可以用Linq做这些都不是问题。
绑定也没那么麻烦。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,