如何从图像URL列表中创建图库?

时间:2011-10-19 22:05:28

标签: c# repeater amazon-simpledb

我可以使用Amazon SimpleDB获取一堆图像URL。我正在尝试了解将URL绑定到Repeater并创建照片库的最佳方法。中继器可能不是最好的数据控件,所以如果你能想出更好的方法,我愿意接受建议。

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 [String]的URL,但我在网上看到的所有例子都使用带有Eval类型语句的内联DataBinding SQL类型函数。

在.aspx页面中,我是否必须设置除ItemTemplate以外的任何内容?

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

1 个答案:

答案 0 :(得分:0)

您需要在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方法”并单击“终止”。

然后使用它,只需调用&lt;%#Eval(“Value”)%&gt;在你的ItemTemplate中,例如:

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

Eval函数查找属性,字符串除“Length”属性外没有其他属性。这就是为什么你需要创建一个stringwrapper,以便Eval可以调用Value属性并获取字符串值。