DataBind和/或asp:Repeater的迭代器整数

时间:2010-08-05 15:57:01

标签: c# asp.net

我有一个返回自定义对象的LINQ查询。该对象派生自Dictionary<T>个结果对象,每个结果对象都有一个URL。我的LINQ对象根据T中的URL属性对Dictionary<T>进行分组,然后从URL组中获取object.First()项。

现在我的LINQ对象都有唯一的网址,并且还计算了原始Dictionary<T>.

中网址重复次数的次数

好的,此时我在LINQ对象上执行DataBind到ASP页面。 DataBind是<asp:Repeater>的{​​{1}}。

我想要的是获取ItemTemplate的迭代器,就像它是一个简单的<asp:Repeater>类型循环一样。这样我就可以动态显示结果的数量(比如说有五个结果的列表,每个结果都有1.结果.... 2.结果...... 3.结果......

我不知道有多少结果可以开始(可能没有)。

如何实现这一目标?我可以使用lambda表达式来改变结果对象,并在我的Linq列表中保存一个整数吗?

我希望这不会太混乱!请询问您是否需要更好的解释。非常感谢,一如既往。

2 个答案:

答案 0 :(得分:2)

如果你想在Repeater中显示行号,它实际上比我想象的容易得多。您不需要知道当前索引,因为每次绑定发生时您都可以计算/递增一个值并显示它。

首先在.cs代码中创建一个整数。例如:

public partial class _YourPageName : System.Web.UI.Page
{
    private int _itemCounter = 0;

然后在Repeater ItemTemplate中,您只需使用Literal或其他内容显示它。

<asp:Literal ID="litCount" runat="server" OnDataBinding="litCount_DataBinding" />

然后为DataBinding或您想要使用的任何内容实施Literal事件:

protected void litCount_DataBinding(object sender, System.EventArgs e)
{
    _itemCounter++;
    Literal lt = (Literal)(sender);
    lt.Text = _itemCounter.ToString();
}

每次绑定ItemTemplate时,它都会递增计数器并显示它。

也许我过度简化了你的问题。

答案 1 :(得分:1)

Dictionary

var items = originalItems.Select((Value, Index) => new { Value, Index }); 的重载为迭代器中的每个条目提供索引 - 我刚刚以匿名类型捕获了结果。 (如果您使用的是.NET 4,则可能需要使用Select;这取决于结果的使用位置。)

这将从Index = 0开始 - 当然从1开始你需要:

Tuple<,>

(重命名参数使其保持在Stack Overflow的一条短线上。)