首页 > 解决方案 > 如何限制 Enumerable.Range 仅使用最后一个索引的计数而不超出它?- ASP.NET

问题描述

每次我将其用作转发器的数据源时,最终它将显示在我为 gridview 制作的分页中超出索引的页码。你们有没有想法根据gridview.pagecount来限制这个enumerable.range?我只想在每次索引点击时显示 10 个页码。所以这里是代码

protected void Repeater_Load(object sender, EventArgs e)
{
    Repeater Repeater = (Repeater)sender;
    Repeater.DataSource = Enumerable.Range(GridView1.PageIndex + 1, 10);
    Repeater.DataBind();
}

我的 Gridview 总共有 21 页计数,但我想在每次点击数字时显示 10 个页码。

例如在这里,我点击了 2,它将显示 2、3、4、5、6、7、8、9、10、11 或 2-11,如果您在 gridview 中确实有 10 页,则此方法有效,但是如果我没有 10 页怎么办?如果我有 3 页数,那么我在 enumerable.range 中放了 10 页怎么办?

这就是我目前面临的问题,我希望你们能帮助我解决我目前正在处理的困境。

而且,如果我单击最后一页计数 21,它将显示 21-30,它不再在 gridview1.pageindex 中。

更新

这是我的问题的图像...

图片:查看

这也是我现在在代码中所做的

  protected void Repeater_Load(object sender, EventArgs e)
        {

            Repeater Repeater = (Repeater)sender;

            Repeater.DataSource = Enumerable.Range(GridView1.PageIndex + 1, GridView1.PageCount); // 10
            Repeater.DataBind();

        }

标签: c#asp.net

解决方案


.Range需要两个参数:起始编号和要采用的元素数量。

如果我理解正确,并且您想将您的页面分成 10 个批次,您可以动态计算这些值——

int currentPage = GridView1.PageIndex;
int batchSize = new[] { GridView1.PageCount - currentPage, 10 }.Min();

Repeater.DataSource = Enumerable.Range(currentPage, batchSize);

推荐阅读