【问题标题】:ASP.net Repeater -- setting N Maximum Repetitions?ASP.net 中继器 - 设置 N 最大重复次数?
【发布时间】:2013-07-30 19:30:00
【问题描述】:

我现在正在使用Repeater 控件在多个不同站点上显示来自SQL 服务器的数据。我想知道是否有任何方法可以让中继器只“重复”或运行其循环最多 N 次。

我将一个 Div 元素分成 4 个相等的部分,这些部分的空间刚好够这个中继器的 4 个周期。如果它运行超过 4 次,它会将 div 中的所有内容向下推,并开始我希望避免的新的图像/文本行。它使网页看起来更丑陋,并且对客户来说并没有真正起到什么作用。

还有什么方法可以随机选择通过中继器显示哪些迭代?例如,页面加载一次,转发器拉取迭代 2-5,然后刷新页面,转发器拉取迭代 1-4。如果我可以使显示的图像/文本是随机的,那将是非常酷的。

对于那些好奇的人来说,中继器是一个 ASP.net 对象,它基本上迭代地显示或以其他方式处理来自表、SQL 数据库等的数据。它只是逐行遍历数据。

【问题讨论】:

  • 我认为这是数据绑定的?这种限制应该在您的数据源中实现......(否则您正在查看class CustomRepeater : Repeater
  • 最好限制数据源的记录数,而不是限制重复器在停止之前执行的迭代次数。根据您的数据源,您可以使用 LINQ 函数 .Skip() 和 .Take()。
  • 所以你建议我简单地更改我的 SQL 查询以仅撤回前 4 个......这也是一种方法,尽管我想抓住所有这些,所以我可以努力制作它随机选择要显示的数据。

标签: c# asp.net .net repeater


【解决方案1】:

您可以在将数据源绑定到中继器之前对数据源本身执行此操作,而不是尝试对转发器做任何时髦的事情。

例如:

var rand = new Random();
var myCollection = GetSomethingFromSomewhere();
myRepeater.DataSource = myCollection
    .OrderBy(x => rand.Next())
    .Take(4);
myRepeater.DataBind();

【讨论】:

  • 有趣...我不确定这个语法在这里做什么,但我明白你在做什么,在后面的代码中做这件事是我的第一个想法,也可能将数据源截断到最大4 个元素。
  • 如果您不使用代码隐藏,那么正如您在上面评论的那样,您可以调整 SQL 语句来完成同样的事情,使用 TOP 4ORDER BY 随机化它。
  • 如果您不熟悉 LINQ,它只是在 .NET(3.5 及更高版本)中处理集合的一种更快的方法。 OrderBy 将获取一个集合并按某个参数(或在本例中为随机数)对其进行排序。 Take 从集合中检索前 N (4) 条记录。
  • 我正在使用后面的代码,所以我认为这是这里最好的答案,感谢所有这些都非常有帮助。最终会发布结果
  • 这个问题的任何工作结果或代码,我有同样的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多