在运行时更改转发器索引

时间:2017-05-02 07:12:34

标签: c# asp.net .net vb.net asprepeater

我正在使用4个值填充转发器控件。

1 Class_1
2 Class_2
3 Class_4
4 Class_3

Repeater绑定索引值,因此当显示repeater时,它显示数据为:
 Class_1
 Class_2
 Class_4
 Class_3。

但我想将数据显示为:

Class_1
 Class_2
 的 Class_3
 Class_4。

我需要在绑定时更改序列。 在绑定或显示数据时,我需要首先显示索引4的值,然后在索引3处显示。

1 个答案:

答案 0 :(得分:0)

上面是IEnumerable类实现的示例,它将按1,2,4,3的顺序提供值:

public class MyEnumerable<T> : IEnumerable<T>
{
    private List<T> _list;

    public MyEnumerable()
    {
        _list = new List<T>();
    }

    public void Add(T value)
    {
        _list.Add(value);
    }

    public bool Remove(T value)
    {
        return _list.Remove(value);
    }

    public bool Exists(Predicate<T> value)
    {
        return _list.Exists(value);
    }

    public bool Contains(T value)
    {
        return _list.Contains(value);
    }
    public IEnumerator<T> GetEnumerator()
    {
        for (int i = 0; i < _list.Count; i++)
        {
            if (i == 2)
            {
                i++;
                yield return _list[i];
                yield return _list[i-1];
            }
            else
            {
                yield return _list[i];
            }
        }
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        for (int i = 0; i < _list.Count; i++)
        {
            if (i == 3)
            {
                yield return _list[i + 1];
                yield return _list[i];
                i += 2;
            }
            else
            {
                yield return _list[i];
                i++;
            }
        }
    }
}

但如果您的列表超过4件,则需要根据需要更改GetEnumerator()

这是打印“First”,“Second”,“Third”,“Fourth”的例子,而在List中它们将按顺序排列为“First”,“Second”,“Fourth”,“Third”。

static void Main(string[] args)
{
    MyEnumerable<string> myEnumerable = new MyEnumerable<string>()
    {
        "First","Second","Fourth","Third"
    };
    foreach (var tmp in myEnumerable)
    {
        Console.WriteLine(tmp);
    }
}