Как я могу создать галерею изображений из списка URL-адресов изображений? - PullRequest
1 голос
/ 20 октября 2011

Я могу получить несколько URL-адресов изображений с помощью Amazon SimpleDB. Я пытаюсь понять, как лучше связать URL-адреса с повторителем и создать фотогалерею. Повторитель может быть не лучшим средством управления данными, поэтому я открыт для предложений, если вы можете придумать лучший способ.

List<string> imgURLS = new List<string>();    

String selectExpression = "Select * From Gallery Where Category = 'imgurls'";
SelectRequest selectRequestAction = new SelectRequest().WithSelectExpression(selectExpression);
SelectResponse selectResponse = sdb.Select(selectRequestAction);

if (selectResponse.IsSetSelectResult())
{
    SelectResult selectResult = selectResponse.SelectResult;
    foreach (Item item in selectResult.Item)
    {
        Console.WriteLine("  Item");
        if (item.IsSetName())
        {
           imgURLS.Add(item.Value)  //the URL of the image
        }
    }
}

 Repeater1.DataSource = imgURLS;
 Repeaster1.DataBind();

В этом примере я просто строю список [строку] URL-адресов, но во всех примерах, которые я вижу в Интернете, используется встроенная функция типа DataBinding SQL с оператором типа Eval.

На странице .aspx нужно ли устанавливать что-либо, кроме ItemTemplate?

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
   //How do I direct my DataSource here?
    </ItemTemplate>
</asp:Repeater>

1 Ответ

0 голосов
/ 20 октября 2011

Вам необходимо добавить два класса в ваш проект в каталоге App_Code.

Один будет содержать оболочку для строкового класса (я назвал его StringWrapper), а другой будет содержать метод типа List.Этот последний метод вернет ваш список imgURLS.

public class StringWrapper
{
    public string Value
    { get; set; }
    public StringWrapper(string s)
    {
        this.Value = s;
    }

    public static implicit operator StringWrapper(string s)
    {
        return new StringWrapper(s);
    }
}

public static class Tools
{
    public static List<StringWrapper> GetImgUrls()
    {
        List<StringWrapper> imgURLS = new List<StringWrapper>();    

        String selectExpression = "Select * From Gallery Where Category = 'imgurls'";
        SelectRequest selectRequestAction = new SelectRequest().WithSelectExpression(selectExpression);
        SelectResponse selectResponse = sdb.Select(selectRequestAction);

        if (selectResponse.IsSetSelectResult())
        {
            SelectResult selectResult = selectResponse.SelectResult;
            foreach (Item item in selectResult.Item)
            {
                Console.WriteLine("  Item");
                if (item.IsSetName())
                {
                   imgURLS.Add(item.Value)  //the URL of the image
                }
            }
        }
        return imgURLS;
    }
}

Затем в режиме конструктора на странице aspx вы выбираете ретранслятор и нажимаете в верхнем правом углу.Вы нажимаете выбрал источник данных, добавить новый источник данных.Вы выбираете объект (переименуйте его, если хотите) и нажимаете ОК.

Затем вы снимаете флажок, чтобы увидеть все объекты, которые можно использовать, вы выбрали имя созданного вами класса (здесь, Инструменты).Нажмите кнопку «Далее», затем выберите метод GetImgUrls и нажмите «Завершить».

Затем, чтобы использовать его, просто вызовите <% # Eval («Value»)%> в своем шаблоне ItemTemplate, например:

    <ItemTemplate>
        <img src='<%# Eval("Value") %>' />
    </ItemTemplate>

Функция Eval ищет свойства, а строка не имеет свойства, кроме свойства «Длина».Вот почему вам нужно сделать stringwrapper, чтобы Eval мог вызвать свойство Value и получить строковое значение.

...