Repeater 和datalist 实现排序功能和分页完美实现(双击升序排列,再双击降序排列).原理很简单,在<a href="#" onclick="">,用它来触发一个LinkButton的服务器事件.LinkButton的服务器事件里重新对数据源进行排序.然后再绑定Repeater或datalist上.
要实现,首先需要在HTML里面加个javascript函数和两个Hidden,一个用来储存要排序的字段,还有一个用来储存升序还是降序.(asc/desc)
Javascript代码如下:
<script language="javascript">
function Getsort(obj)
{
document.all.sortfield.value=obj;
if (document.all.sortstring.value == 'ASC')
{
document.all.sortstring.value = 'DESC';
}
else if (document.all.sortstring.value == 'DESC')
{
document.all.sortstring.value = 'ASC';
}
__doPostBack('LinkButton1','');
}
</script>
HTML中:
<INPUT type="hidden" id="sortfield" runat="server">
<INPUT type="hidden" id="sortstring" runat="server" value="ASC">
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click"></asp:LinkButton>
<a href ="#" onclick ="Getsort('name');">【方法里是要排序的字段名】</a>
后台代码如下:用datalist实现,如果用repeater改下名即可
public partial class Datalist : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session["fullsortstring"] = "price asc";//默认的排序方式
datalist(Session["fullsortstring"].ToString ());
}
}
public void datalist(string sort)
{
string sql = "select * from product order by id";
int curpage = Convert.ToInt32(this.lbl.Text);
System.Web.UI.WebControls.PagedDataSource ps = new PagedDataSource();//分页控件
DataTable td = new DataTable();
td = Database.RunDataTable(sql);//返回SQL语句所执行的表数据
td.DefaultView.Sort = sort;
ps.DataSource = td.DefaultView ;
ps.AllowPaging = true;//允许分页
ps.PageSize= 3;//每页显示条数3条
ViewState["pagecount"] = ps.PageCount;//总页数
ps.CurrentPageIndex = curpage - 1;//当前页
this.Button1.Enabled = true;
this.Button3.Enabled = true;
if (curpage == 1)
{
Button1.Enabled = false;
}
if (curpage == ps.PageCount)
{
this.Button3.Enabled = false;
}
DataList1.DataSource = ps;//绑定到datalist上
DataList1.DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
//上一页
this.lbl.Text = Convert.ToString(Convert.ToInt32(lbl.Text) - 1);
string fullsortstring = Session["fullsortstring"].ToString();
this.datalist(fullsortstring);
}
protected void Button3_Click(object sender, EventArgs e)
{
//下一页
this.lbl.Text = Convert.ToString(Convert.ToInt32(lbl.Text) + 1);
string fullsortstring = Session["fullsortstring"].ToString();
this.datalist(fullsortstring);
}
protected void Button4_Click(object sender, EventArgs e)
{
//跳转到指定页数
int n=Convert .ToInt32 ( ViewState ["pagecount"].ToString ());
if (this.TextBox1.Text != null&&this.TextBox1 .Text !="")
{
string num = this.TextBox1.Text;
int m = Convert.ToInt32(this.TextBox1.Text);
if (m <= n)
{
this.lbl.Text = num.ToString ();
this.datalist(Session["fullsortstring"].ToString());
}
Server.Transfer("Default.aspx");//提示错误页
}
else
{
Response.Write("<script language='javascript'>alert('请输入要翻页的页数')</script>");//此处用lable比较好,因为是测试所以没有加
}
}
protected void LinkButton1_Click(object sender, EventArgs e)
{
string sortString = Request.Form["sortstring"].ToString();
string sortfield = Request.Form["sortfield"].ToString();
Session["fullsortstring"] = sortfield + " " + sortString;
string fullsortstring = Session["fullsortstring"].ToString();//保存前台穿过来的数据。
if (fullsortstring != null && fullsortstring != "")
{
datalist(fullsortstring);//绑定参数传给datalist、
}
}
}
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/waltguo/archive/2008/09/13/2920382.aspx