将二维数组绑定到转发器 - 错误

时间:2010-04-06 19:06:45

标签: c# asp.net

我有这个数组:

string[,] productData = new string[5,7];

我将它绑定到转发器并调用类似的方法:

<img src="<%# getPhoto1WithReplace(Container.ItemIndex) %>"

定义如下:

public String getPhoto1WithReplace(Object itemIndex)
{
    int intItemIndex = Int32.Parse(itemIndex.ToString());
    if (productData[intItemIndex, 3] != null)
        return this.ResolveUrl(productData[intItemIndex, 3].ToString());
    else return String.Empty;
}

我不明白为什么它将itemIndex调用为getPhoto1WithReplace为5。 我的数组有5个索引:0,1,2,3,4,所以HOW Container.ItemIndex可以是5 ......?

2 个答案:

答案 0 :(得分:2)

当您将数据绑定到列表类型控件(如转发器)时,它唯一关心的是您提供的对象是否实现System.Collections.IEnumerable接口。

如果您尝试在foreach循环中迭代二维数组,您会发现跨两个维度迭代每个项目,而不仅仅是一个维度。我还没有尝试将二维数组绑定到转发器,但我想,转发器会将数组中的所有元素扩展为一个平面列表。

当我使用转发器时,我通常使用RepeaterItem(Container)的DataItem属性而不是ItemIndex,因为我通常不关心索引是什么。也许那对你也有用。

您可能需要考虑将数据修改为比二维数组更结构化的内容。

答案 1 :(得分:0)

您的转发器是否有标头模板?

Items集合中充满了RepeaterItems - 它不一定是数据项。它也可以是标题项或页脚项。