문제

아래와 같은 데이터 주의자가 있습니다.

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

항목 템플릿은 단순히 등록 된 UserControl, myControl입니다. 데이터리스트의 데이터 소스는 a List<List<T>> 그리고 MyControl의 공공성이 통과되었습니다 List<T> 그런 다음 자체 데이터 바인딩을 확인합니다. 이것은 제대로 작동하지만 ASPX/C 페이지에서 데이터베인딩에 대한 일반적인 혐오감이 있습니다. 뒤에있는 코드에서 홍보 값을 설정하는 가장 효과적인 방법은 무엇입니까?

도움이 되었습니까?

해결책

라인에 데이터 바인딩 구문이 충분하지 않은 경우, 항상 데이터리스트의 ItemDatabound 이벤트에 연결할 수 있습니다.

<asp:DataList runat="server" ID="myDataList" 
                OnItemDataBound="DataList_ItemDataBound">
    <ItemTemplate>
        <uc:MyControl ID="id1" runat="server" />
    </ItemTemplate>
</asp: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;
        }
    }

Datalist.itemDatabound 이벤트에 대한 자세한 내용은 - 여기를 읽으십시오

ASPX에서 Item Databound Delegate Inline을 선언하지 않으려면 뒤에 코드에서 수행 할 수도 있습니다. 아마도 페이지로드 이벤트에서 다음을 수행 할 수도 있습니다.

myDataList.ItemDataBound += DataList_ItemDataBound;

도움이되기를 바랍니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top