C# foreach循环C中的双零索引#
这是我目前遇到的一个非常奇怪的问题。 我的代码中有一个C# foreach循环C中的双零索引#,c#,foreach,C#,Foreach,这是我目前遇到的一个非常奇怪的问题。 我的代码中有一个中继器,我在其中填充了数据。这是工作的预期 在我的中继器上,我得到了一个如下的数据绑定: <asp:Repeater ID="repeater" Visible="true" runat="server" OnItemDataBound="getOverlays"> <ItemTemplate> <span><%#Eval("name") %></span> <
中继器
,我在其中填充了数据。这是工作的预期
在我的中继器上,我得到了一个如下的数据绑定:
<asp:Repeater ID="repeater" Visible="true" runat="server" OnItemDataBound="getOverlays">
<ItemTemplate>
<span><%#Eval("name") %></span>
</ItemTemplate>
</asp:Repeater>
在我的世界里,这空虚会写出来
0
1
2
但现在这行代码写出
0
0
1
这对我来说是一个很大的谜!以前有人遇到过这样的问题吗?我做错了什么
我清楚地看到了我的数据源的3个名称,我得到了三个索引,前两个索引得到了相同的索引,即0
我的索引在第一次迭代后被重置了,但我以前从来没有遇到过这个问题,有人找到了解决方案,或者可以告诉我为什么我的索引被扭曲了
提前谢谢你。
OnItemDataBound在每个项都是数据绑定后调用,而不是在绑定所有数据时调用。我认为你对这件事的理解是错误的
所以第一个循环没有项目,第一个项目之后是0,然后是0,1。您必须对此进行调试,以查看它正在执行的操作,但这似乎是问题所在。您不应在OnItemDataBound事件中循环,它会为每个项目自动调用一次。相反,您应该使用
e.Item.ItemIndex
。可能是第一次调用,Repeater.Items
没有项目。第二次,有一个项目(索引=0)。第三次,它有两个项目(索引0和1)
引用:为绑定的每个项触发OnItemDataBound事件。所以你应该做下面的事情
protected void getOverlays(object sender, RepeaterItemEventArgs e) {
Response.Write(e.Item.ItemIndex);
}
span中的第一个代码段输出什么?(实际产出)阿尔菲;它输出正确的值,这就是为什么我感到困惑的原因,因为在看到OnItemDataBound中的索引之前,一切都是正确的。对于添加到repeater的每个项,都会调用OnItemDataBound方法,我相信这是在将项添加到Items集合之前。有三个项目,它将被调用三次。第一次调用时,集合为空。第二次调用时,它包含一项(索引0),第三次调用时,它包含两项(索引0和1)。您想完成什么?谢谢,是的,可能是因为我已经有一段时间没有使用中继器了,并且手动完成了数据集上的大多数迭代。但是是的,问题的结果是我在一个已经进行了foreach的循环上进行了foreach,谢谢你的澄清。彼得B:你的帖子让我意识到了这一点,但也感谢詹姆斯·德夫指出了这一点,你们两人都给出了正确的答案。TYVM
protected void getOverlays(object sender, RepeaterItemEventArgs e) {
Response.Write(e.Item.ItemIndex);
}