The*_*max 6 c# asp.net user-controls
我有一个包含转发器的用户控件,它的datasouce是使用IEnumerable对象设置的,该对象包含代码中查询返回的数据。中继器具有分页功能,并为每个页面显示自定义数量的记录。
我不想每次用户单击“下一步”按钮以查看转发器中记录的下一页时都加载所有数据。如何使它成为IQueryable并使用Skip()和Take()仅显示该页面所需的记录?
我有以下代码:
//Code that assigns query to repeater data source
DataSet = QueryGoesHere.ToArray(); // returns IEnumerable
repeater.DataSource = DataSet;
repeater.DataBind();
//Code that creates PagedDataSource - how can I update this to make it display only the records that are needed for the currently displayed page?
objPds = new PagedDataSource();
objPds.DataSource = DataSource
objPds.AllowPaging = true;
objPds.PageSize = 5;
objPds.CurrentPageIndex = CurrentPage;
lblCurrentPage.Text = "Page: " + (CurrentPage + 1).ToString() + " of " + objPds.PageCount.ToString();
Run Code Online (Sandbox Code Playgroud)
如果我正确,那么您想使用自己的实现,而不是加载所有数据,然后使用PagedDataSource,对吗?
如果是这样,则必须确保它QueryGoesHere是支持此查询的(Linq2Sql或EF)。然后,您必须像这样获取日期计数
var count = QueryGoesHere.Count();
Run Code Online (Sandbox Code Playgroud)
并获取要显示的数据部分:
var skip = (curPageNumber - 1)*itemsPerPage;
var display = Math.Min(count - skip, itemsPerPage);
Run Code Online (Sandbox Code Playgroud)
并使用
var displayedItems = QueryGoesHere.Skip(skip).Take(display).ToArray();
Run Code Online (Sandbox Code Playgroud)
这应该够了吧。