2012-04-17 9 views
4

ListViewにバインドしたいList<string>コレクションがあります。List <string>をWebFormsのListViewにバインドする方法

以下

ListViewためのマークアップです:

私の分離コードで
<asp:ListView ID="lvList" runat="server"> 

     <LayoutTemplate>   
      <div id="Div1" runat="server">    
       <div ID="itemPlaceholder" runat="server">    
       </div>   
      </div>  
     </LayoutTemplate> 

     <EmptyDataTemplate>   
      <div id="Div2" runat="server">    
       <div ID="itemPlaceholder" runat="server">     
       No data was returned.    
       </div>   
      </div>  
     </EmptyDataTemplate> 

     <ItemTemplate> 
      <asp:Label ID="ProductNameLabel" runat="server" Text='<%# Eval ("theList") %>'/> 
     </ItemTemplate> 

</asp:ListView> 

protected void Page_Load(object sender, EventArgs e) 
{   
    List<string> theList = new List<string>(); 
    //populate members of list 
    lvList.DataSource = theList; 
    lvList.DataBind(); 
} 

エラーメッセージ:

System.Web.HttpExceptionは、ユーザーコード
によって未処理でした Message = "DataBinding: 'System.String'にはプロパティが含まれていませんyを という名前で 'theList'

私はここで間違ってやっていると思います、誰かが私に助言することができますpls?

答えて

9

使用'<%# Container.DataItem %>

<asp:Label ID="ProductNameLabel" runat="server" Text='<%# Container.DataItem %>'/> 
1

<asp:Label ID="ProductNameLabel" runat="server" Text='<%# Eval ("theList") %>

あなたがプロパティに参照のうえされているので、この行はリストの現在の要素の中に「theList」を問題の原因となっているが、リストはありません内部の文字列以外のプロパティはありません。

道のりは、たとえばコードの背後にあるメソッドの実装です。

protected void Test(object obj) 
{ 
    return obj.ToString(); 
} 

とASPXで:

<asp:Label ID="ProductNameLabel" runat="server" Text='<%# Test(Container.DataItem) %> 

私はそれをテストしていませんが、それはトリックを行う必要があります。

1

EVALは単一キー値で使用されます。データバインドコントロールは、コレクションを最初から最後まで反復し、evalステートメントを配置する場所に1つずつ配置します。

このリンクの回答はより良いアイデアを提供します。これは

を助ける How to retrieve current object from collections using DataBinder.Eval?

・ホープ

関連する問題