由于上篇博文并没有被大家拍得神志不清,心中不由"沾沾自喜",今天突然有点小爽,就决定把昨天工作中一点心得分享给大伙,
还希望大伙不要给我面子,拿起板砖死命拍。昨天遇到另一个gridview排序的问题,要求按时间排序时,忽略分页,也就是点击下一页
的时候,还是按照升序或者降序排序,而在当前页点击列头还是排序。
因为这个问题以前没遇到过,gridview自带的排序肯定不能实现要求,用ASPxGridView排序也只能在当前页排序,于是想到了
Jquery虽然用jQuery的ajax方法可以实现,但在分页上遇到一点小麻烦,测试是可以通过,但在我的实际运用中,操作起来却让人有
点头痛,时间急迫,于是用一个最简单的方法,但关于用jQuery来解决还有待研究。
第一步:在SQL SERVER(我用的是2008)数据库中写一个存储过程,把排序作为参数,存储过程如下:


@PageSize INT,--分页条数
@PageIndex INT,--当前页数
@Sort VARCHAR(50) --条件排序
AS
SELECT CouponId,CouponTopic,EffectiveDate,BeginDate,EndDate,
case @sort
when ' SI_EndDate DESC ' then ROW_NUMBER() OVER(ORDER BY EndDate DESC)
when ' SI_EndDate ASC ' then ROW_NUMBER() OVER(ORDER BY EndDate ASC)
else ROW_NUMBER() OVER(ORDER BY CouponId ASC)
end
AS RowNum FROM CouponInfo
WHERE RowNum BETWEEN(@PageIndex-1)*@PageSize+1 AND(@PageSize*@PageIndex)
ORDER BY RowNum
第二步,在Visual Studio(我用的是2010)中添加一个测试页面,Linq To Sql 类
在测试页面中放一个gridview ,一个分页控件,我用的是AspNetPager ,一个隐藏域,


<asp:Label ID="Label33" runat="server"
在要排序的列头放一个LinkButton 在页面上就显示开始时间和结束时间,
第三步,创建Linq To Sql 类MDClass.dbml,
直接把存储过程拖到Linq To Sql 类中的设计图中创建方法,直接就在页面就可以调用了,系统会生成MDClassDataContext,实例化MDClassDataContext就可以与数据库交互了
第四步,后台绑定 :


public void DataBindCouponInfo(string sort)
{
this.gvShoppe.DataSource = MDC.SORT_PAGINATION
var CouponCount = from c in MDC.CouponInfo select c;
int count = CouponCount.Count();
AspNetPager1.RecordCount = count;//获取总条数
this.gvShoppe.DataBind();
}
//在 LinkButton单击事件中:
protected void lBtnEndDate_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(hOrderBy.Value))
{
hOrderBy.Value = " EndDate ASC ";
}
else
{
if (hOrderBy.Value.Trim().Equals("EndDate ASC"))
{
hOrderBy.Value = " EndDate DESC ";
}
else
{
hOrderBy.Value = " EndDate ASC ";
}
}
DataBindCouponInfo(hOrderBy.Value);
}
//分页时从新绑定
protected void AspNetPager1_PageChanged(object sender, EventArgs e)
{
DataBindCouponInfo(hOrderBy.Value);
}
这样就可以实现gridview 忽略分页排序,当然这个方法在我的思路中并不是好的方法,如果数据量过大这也是一个头痛的问题
当往往这样的需求数据量不会很大的,在这里也要感谢园友李渐澜的帮助。同时也给需要有此要求的园友提供一个并不是很好的思路。
由于时间仓促,未能美化页面,敬请谅解!