c#
  • asp.net
  • data-binding
  • itemtemplate
  • 2009-07-30 11 views 1 likes 
    1

    で項目テンプレートでユーザーコントロールにリストのデータバインディング私は以下のようなデータリストを持っている:分離コード

    <asp:DataList runat="server" ID="myDataList"> 
        <ItemTemplate> 
        <uc:MyControl ID="id1" runat="server" PublicProperty='<%# Container.DataItem %>' /> 
        </ItemTemplate> 
    </asp:DataList> 
    

    項目テンプレートは、単に登録したユーザーコントロール、MyControlとあります。 DataListのDataSourceはList<List<T>>で、MyControlのPublicPropertyはList<T>に渡され、次にそれ自身のデータバインディングが実行されます。これは正常に動作しますが、私はaspx/cページのデータバインディングに一般的な嫌悪感を持っています。コード内のPublicProperty値を設定する最も効率的な方法は何ですか?

    答えて

    3

    行内のデータバインディング構文が十分でない場合は、常にDataListのItemDataboundイベントにフックできます。

    <asp:DataList runat="server" ID="myDataList" 
           OnItemDataBound="DataList_ItemDataBound"> 
        <ItemTemplate> 
         <uc:MyControl ID="id1" runat="server" /> 
        </ItemTemplate> 
    </asp:DataList> 
    

    次に、ページ/コントロールを含むコードの背後に、ItemDataBoundイベントを追加できます。 Read Here

    あなたではなくASPXであなたのItemDataBoundデリゲートをインラインで宣言しないだろう場合も背後にあるコードでそれを行うことができ - - おそらくあなたのページの読み込みにDataList.ItemDataBoundイベントの詳細については

    protected void DataList_ItemDataBound(object sender, DataListItemEventArgs e) 
        { 
         if (e.Item.ItemType == ListItemType.Item 
          || e.Item.ItemType == ListItemType.AlternatingItem) 
         { 
          DataListItem item = e.Item; 
          //List<string> or whatever your data source really is... 
          List<string> dataItem = item.DataItem as List<string>; 
          MyControl lit = (MyControl)item.FindControl("id1"); 
          lit.PropertyName = dataItem; 
         } 
        } 
    

    イベント:

    myDataList.ItemDataBound += DataList_ItemDataBound; 
    

    希望

    +0

    は私のコードを更新したのに役立ちます... itemTypeにロジックのエラー –

    +0

    I Wでした... myDataList.Controls [0] .Controls [1] .FindControl( "control")などですが、これは唯一の答えですので、感謝します。 – Nick

    関連する問題