CodeBehind의 항목 템플릿에서 USERCONTROL에 목록을 데이터베이닝
-
05-07-2019 - |
문제
아래와 같은 데이터 주의자가 있습니다.
<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;
도움이되기를 바랍니다
제휴하지 않습니다 StackOverflow