Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 使用实体框架在ListView中分页_Asp.net_Entity Framework - Fatal编程技术网

Asp.net 使用实体框架在ListView中分页

Asp.net 使用实体框架在ListView中分页,asp.net,entity-framework,Asp.net,Entity Framework,我正在使用实体框架在列表视图中进行分页,在单击next/prev按钮后通过startindex和maxrows时,我被卡住了 这是我的密码 private List<WorkItem> Data(int startindex, int maxrows) { return (from x in ss.WorkItem select x).OrderBy(p => p.WorkItemID).Skip(

我正在使用实体框架在
列表视图中进行分页,在单击next/prev按钮后通过
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();
}
私有列表数据(int startindex,int maxrows)
{            
返回(从ss.WorkItem中的x开始
选择x).OrderBy(p=>p.WorkItemID).Skip(startindex).Take(maxrows).ToList();
}
受保护的无效lvWorkItems\u页面属性更改(对象发送方,页面属性更改事件参数e)
{
this.DataPager1.SetPageProperties(e.StartRowIndex,e.MaximumRows,false);
lvWorkItems.DataSource=数据(e.StartRowIndex,e.MaximumRows);
lvWorkItems.DataBind();
}
我的问题是当我单击下一步/上一步按钮时,如何传递
startindex
maxrows

请帮忙这也正是我的问题

但是我的问题通过改变业务输出类方法的结构得到了解决

当然,通过这种方式,您需要有数据输出和行数

并且不要忘记,必须从数据库中获取与相同页面布局数据相关的问题

我的课程设计如下

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

    }
使用System.Collections.Generic;
使用System.Linq;
使用Andish.CSS.Common.Enum;
使用自动制版机;
使用system.linq.dynamic;
命名空间Andish.CSS.Common.Result.Implementation
{
公共静态类pagingreult
{
公共静态PageResult ToPageResult(此IQueryable可查询,int rowCount,
int页码,字符串sortField,DynamicLinqSortFieldKind
DynamicClinQSortFieldKind)
{
var allQueryRow=queryable.ToList().Count();
var skipLen=(页码-1)*行数;
字符串orderKind=“”;
orderKind=DynamicClinQSortFieldKind==DynamicClinQSortFieldKind.Asc?:“Desc”;
PageResult PageResult=新的PageResult
{
页码=页码,
RowCount=RowCount,
结果=Mapper.Map(queryable.OrderBy(sortField+orderKind)
.Skip(skipLen).Take(rowCount.ToList()),
ResultRowCount=allQueryRow,
PageCount=allQueryRow%rowCount==0?allQueryRow/rowCount:(allQueryRow/rowCount)+1
};
返回页面结果;
}
}
}
创建此枚举
公共枚举DynamicLinqSortFieldKind
{
升序=0,
递减=1
}
为了使用这种扩展方法,请执行以下操作 我有一个来自类ExecutiveUnit的结果,我想把这个类映射到另一个类 ExecutiveUnitModel。 我用的是automapper nuget

var xresult = result.ToPageResult<ExecutiveUnit, ExecutiveUnitModel>(RowNumbers, pageNumber, "Code", DynamicLinqSortFieldKind.Ascending);
var xresult=result.ToPageResult(行号、页码、“代码”、DynamicLinqSortFieldKind.升序);

请检查它,它的扩展方法:

 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);
   }        
}
公共静态IQueryable MyPage(此IQueryable对象,int
页面,int pageSize,System.Linq.Expressions.Expression
钥匙选择器,bool asc,out int ROWSCONT)
{
rowsCount=obj.Count();
如果(asc)
{
返回obj.OrderBy(keySelector).Skip(page*pageSize).Take(pageSize);
}
其他的
{
返回obj.OrderByDescending(KeySelect).Skip(页面*页面大小).Take(页面大小);
}        
}

你好,阿里。在此方法中,用户如何获取最后一页?想用户想转到最后一页我如何计算输入参数?更多信息,我需要知道总计数页。当您知道用户正在查看最后一页时?在这种情况下,用户应该无法请求下一页。这里有一些注释:ListView控件(asp)没有分页和分页索引事件,问这个问题的人对你的想法没有任何意见,但如果你将当前页面索引保持在静态变量中,当最终用户单击“下一页”或“最后一页”按钮时,你可以轻松地再次调用我的方法,另外,如果您需要调用页面中的最后一页,您应该收集所选项目的总数量,当您单击LastPageButton时,可以计算您需要的页面数(TotalCount/PageSize)=Page,然后调用我的方法。谢谢我的朋友…谢谢您。