我正在使用实体框架在Listview
进行分页,在点击下一个/上一个按钮后传递startindex
和maxrows
时我被卡住了
这是我的代码
private List<WorkItem> Data(int startindex, int maxrows)
{
return (from x in ss.WorkItem
select x).OrderBy(p => p.WorkItemID).Skip(startindex).Take(maxrows).ToList();
}
protected void lvWorkItems_PagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
{
this.DataPager1.SetPageProperties(e.StartRowIndex, e.MaximumRows, false);
lvWorkItems.DataSource = Data(e.StartRowIndex,e.MaximumRows);
lvWorkItems.DataBind();
}
我的问题是当我点击下一个/上一个按钮时如何传递startindex
和maxrows
。
请帮忙
答案 0 :(得分:3)
请查看它,扩展方法:
public static IQueryable<T> MyPage<T, TResult>(this IQueryable<T> obj, int
page, int pageSize, System.Linq.Expressions.Expression<Func<T, TResult>>
keySelector, bool asc, out int rowsCount)
{
rowsCount = obj.Count();
if (asc)
{
return obj.OrderBy(keySelector).Skip(page * pageSize).Take(pageSize);
}
else
{
return obj.OrderByDescending(keySelector).Skip(page * pageSize).Take(pageSize);
}
}
答案 1 :(得分:1)
这也是我的问题。
但我的问题是通过改变业务输出类方法的结构来解决的。
当然,通过这种方式,您需要拥有数据输出和行数。
不要忘记必须从数据库中提取与相同页面布局数据相关的问题。
我的课程旨在完成以下工作。
using System.Collections.Generic;
using System.Linq;
using Andish.CSS.Common.Enum;
using AutoMapper;
using system.linq.dynamic;
namespace Andish.CSS.Common.Result.Implementation
{
public static class PagingResult
{
public static PageResult<K> ToPageResult<T, K>(this IQueryable<T> queryable, int rowCount,
int pageNumber, string sortField, DynamicLinqSortFieldKind
dynamicLinqSortFieldKind)
{
var allQueryRow = queryable.ToList<T>().Count();
var skipLen = (pageNumber - 1) * rowCount;
string orderKind = "";
orderKind = dynamicLinqSortFieldKind == DynamicLinqSortFieldKind.Ascending ? " Asc" : " Desc";
PageResult<K> pageResult = new PageResult<K>
{
PageNumber = pageNumber,
RowCount = rowCount,
Result = Mapper.Map<IList<K>>(queryable.OrderBy(sortField + orderKind)
.Skip(skipLen).Take(rowCount).ToList<T>()),
ResultRowCount = allQueryRow,
PageCount = allQueryRow % rowCount == 0 ? allQueryRow / rowCount : (allQueryRow / rowCount) + 1
};
return pageResult;
}
}
}
create this enum
public enum DynamicLinqSortFieldKind
{
Ascending = 0,
Descending = 1
}
使用此扩展方法就是这样的 我有一个来自ExecutiveUnit课程的结果,我希望将这个课程映射到课堂上 ExecutiveUnitModel。 我使用的是automapper nuget。
var xresult = result.ToPageResult<ExecutiveUnit, ExecutiveUnitModel>(RowNumbers, pageNumber, "Code", DynamicLinqSortFieldKind.Ascending);