2011-10-19 22 views
1

Amazon SimpleDBを使用して画像URLをたくさん取得できます。 URLをリピーターにバインドしてフォトギャラリーを作成する最善の方法を理解しようとしています。リピータは最高のデータコントロールではないかもしれません。より良い方法について考えることができれば、私は提案をすることができます。この例では 画像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のリスト[文字列]を構築し、私はオンライン見るすべての例は、評価タイプ文でインラインデータバインディングSQLタイプの関数を使用します。

.aspxページでは、ItemTemplate以外を設定する必要がありますか?

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

答えて

0

App_Codeディレクトリに2つのクラスをプロジェクトに追加する必要があります。

文字列クラスのラッパー(StringWrapperという名前)と、List型のメソッドが含まれています。この最後のメソッドはあなたのimgURLSリストを返します。

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; 
    } 
} 


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); 
    } 
} 
は、その後、あなたのaspxページのデザインモードで、あなたはリピーターを選択し、右上隅をクリックしてください。クリックしてデータソースを選択し、新しいデータソースを追加します。オブジェクトを選択し、必要に応じて名前を変更して[OK]をクリックします。

チェックボックスをオフにして、使用できるすべてのオブジェクトを表示し、作成したクラスの名前(ここでは[ツール])を選択しました。次へをクリックし、GetImgUrlsメソッドを選択して終了をクリックします。

それからちょうど#エバール(「値」)%>あなたのItemTemplateには、例えば<%を呼び出し、それを使用する:

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

Eval関数は、プロパティを探し、その文字列を除いたプロパティを持ちません「長さ」プロパティそのため、EvalがValueプロパティを呼び出して文字列値を取得できるように、文字列ラッパーを作成する必要があります。

+0

お世話になりました。ありがとうございました。私はStringWrapperクラスの理由を理解していません。それは何をするためのものか?それは特に何かを拡張するようではありません - それは、私はそれを得ることはできません。 –

+0

実際には、Eval関数はリピータに渡されたデータソースのプロパティを評価し、それを返します。実際には、文字列のリストでは、毎回返されるオブジェクトは文字列であり、文字列自体を返すことのできるプロパティはありません。したがって、valueという名前のプロパティを持つ文字列ラッパーを使用し、このプロパティは文字列の値をカウントします。それがはっきりしているかどうかわからない – GianT971

関連する問題