2013-07-30 19 views
1

我正在使用Repeater控件在多个不同的站点上显示来自SQL服务器的数据。我想知道是否有任何方法让只让中继器“重复”,或者最多运行N次循环。ASP.net中继器 - 设置N个最大重复次数?

我把一个Div元素分成4个相等的部分,这个部分刚好有足够的空间来放置这个转发器的4个周期。如果它运行4次以上,它会将div中的所有内容都推下来,并开始一排我希望避免的图像/文本。它使网页看起来更丑,对于客户来说并没有真正的成就。

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

对于那些好奇的,重复器是一个ASP.net对象,它基本上迭代地显示或以其他方式处理来自表,SQL数据库等的数据。它只是逐行通过任何数据。

+0

我想这是被数据绑定?这种限制应该在你的数据源中实现......(否则你正在看'class CustomRepeater:Repeater') –

+0

最好是限制数据源的记录数,而不是限制迭代次数中继器在停止之前执行。根据数据源的不同,可以使用LINQ函数.Skip()和.Take()。 –

+0

所以,你推荐我只是改变我的SQL查询,只撤回第一个4 ...这也是一种方法,虽然我想抓住所有这些,所以我可以使它随机选择哪些数据正在显示。 – DNAInstant

回答

7

与其试图对中继器做任何事情,你可以在将数据绑定到你的中继器之前将它做到数据源本身。

例如:

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

有趣......我不确定这里的语法是在做什么,但是我看到你在做什么,在代码背后做我的第一个想法,也许截断数据源到最多4个元素。 – DNAInstant

+0

如果你不使用代码隐藏,那么正如你上面所说的,你可以调整SQL语句来完成同样的事情,用一个“TOP 4”和一个“ORDER BY”来随机化它。 –

+0

如果你不熟悉LINQ,它只是处理.NET(3.5及以上版本)集合的一种更快的方法。 'OrderBy'将采集一个集合并通过一些参数对它进行排序(或者在这种情况下是一个随机数)。 'Take'从集合中检索前N(4)条记录。 –