求助:ASP.net Repeater控件分页排序!
ASP.net Repeater控件分页排序!现在是分页后不排序。。。 好几天了。。 都没弄出来。。 ASP.NET 分页 控件 排序 --------------------编程问答-------------------- 排序也要用ViewState[]来存储 --------------------编程问答-------------------- http://fineui.com/demo/#/demo/grid/grid_paging_sorting.aspx --------------------编程问答--------------------是用了ViewState
可是我不知道该怎么分页! --------------------编程问答--------------------
using System;--------------------编程问答-------------------- public DataSet GetinfoList(string table, int pageindex, int pagesize, string orderFid, string Conditions, string[] strparam, object[] strval)
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();
}
}
}
}
{
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);
} --------------------编程问答-------------------- 您看下我的代码,具体应该怎么做?我是新手。谢谢你。 --------------------编程问答-------------------- Convert.ToInt32(Request.QueryString["page"]);
分页你用这个?
用url传值的话ViewState 是不启效的,如果非要这么干,那么你的排序也要用url来传 --------------------编程问答--------------------
怎么写呢? --------------------编程问答-------------------- 建议你使用AspNetPager 控件+repater 分页 . --------------------编程问答-------------------- 如果会用那个AspNetPager就可以了,百度里面搜这个排序就ok --------------------编程问答-------------------- 可以实现排序后分页吗? --------------------编程问答-------------------- 可以实现排序后分页吗? --------------------编程问答--------------------
AspNetPager1.RecordCount = recordCount;
rptList.DataSource = dtList;
rptList.DataBind();
以上是AspNetPager控件的基本绑定 .至于什么排序后 绑定 ,这个给你的查询语句加个排序 就ok了.
--------------------编程问答--------------------
在排序事件那里写
location.href="xxx.apx?order="+ 排序字段+"&acs="+ 1或者0
然后读取Request.QueryString["order"]和Request.QueryString["acs"] --------------------编程问答-------------------- 不行呀,,,,额 --------------------编程问答-------------------- --------------------编程问答-------------------- 你的代码不见有排序事件这部份的啊 --------------------编程问答-------------------- 有的。你好好看看。还有,这个问题刚才我自己解决掉了。
其实就是在把DataView也设置分页就OK了。
谢谢大家! --------------------编程问答-------------------- 创建两个可以点击上下页的按钮,然后调用点击事件,把ViewState[]进行加页,减页 --------------------编程问答-------------------- 楼主能把最终代码粘一下吗?同是新手,学习用! --------------------编程问答-------------------- 求教:刚开始配置web服务器站点,再旧服务器做实验。由于服务器更换了IP地址,需要改哪儿来重新绑定新的IP地址并发布呢 --------------------编程问答--------------------
为什么会纠结 排序后分页 这种说法。。
排序要重新绑定。分页也要重新绑定,2个独立的东西。关键点是你怎么获取正确的数据源绑定到控件上 --------------------编程问答-------------------- 分页我们一般不用系统的那个控件。直接写存储过程来执行。 --------------------编程问答-------------------- http://www.webdiyer.com/controls/aspnetpager --------------------编程问答--------------------
没错,关键是你数据持久层的分页方法,或者是你取出数据后也可以用Linq做这些都不是问题。
绑定也没那么麻烦。
补充:.NET技术 , ASP.NET