안녕하세요, 리피터 내에 계층 적 정보 (네 가지 수준 있음)를 표시해야합니다. 이를 위해 중첩 된 리피터 컨트롤을 사용하기로 결정했습니다. MSDN에서이 기사를 찾았습니다. http://support.microsoft.com/kb/306154 중첩 된 중계기를 사용하여 두 가지 수준의 정보를 얻는 방법을 보여줍니다. 누군가 이것을 4 단계로 확장시킬 수 있습니까? 샘플 코드가 훨씬 유용합니다. 고맙습니다.C#의 중첩 된 리피터
4
A
답변
15
HTML 코드 :
<asp:Repeater ID="Repeater1" runat="server"
onitemdatabound="Repeater1_ItemDataBound">
<ItemTemplate>
<h1>
Repeater 1</h1>
<asp:Repeater ID="Repeater2" runat="server" onitemdatabound="Repeater2_ItemDataBound">
<ItemTemplate>
<h1>
Repeater 2
</h1>
<asp:Repeater ID="Repeater3" runat="server" onitemdatabound="Repeater3_ItemDataBound">
<ItemTemplate>
<h1>
Repeater 3
</h1>
<asp:Repeater ID="Repeater4" runat="server" onitemdatabound="Repeater4_ItemDataBound">
<ItemTemplate>
<h1>
Repeater 4
</h1>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
C# 코드 : 대신하여 ItemDataBound 기능에 테이블을 구축하는 첫 번째 대답에
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt1 = new DataTable();
//Need to assign the Data in datatable
Repeater1.DataSource = dt1;
Repeater1.DataBind();
}
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater Repeater2 = (Repeater)(e.Item.FindControl("Repeater2"));
DataTable dt2 = new DataTable();
//Need to assign the Data in datatable
Repeater2.DataSource = dt2;
Repeater2.DataBind();
}
}
protected void Repeater2_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater Repeater3 = (Repeater)(e.Item.FindControl("Repeater3"));
DataTable dt3 = new DataTable();
//Need to assign the Data in datatable
Repeater3.DataSource = dt3;
Repeater3.DataBind();
}
}
protected void Repeater3_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater Repeater4 = (Repeater)(e.Item.FindControl("Repeater4"));
DataTable dt4 = new DataTable();
//Need to assign the Data in datatable
Repeater4.DataSource = dt4;
Repeater4.DataBind();
}
}
}
0
인터넷에서 사용할 수있는 예제가 많이 있습니다. 다음은 그 중 일부입니다. 당신은 또한 코드를 다운로드 할 수 있습니다 아래 링크에서
http://support.microsoft.com/kb/326338
http://www.codeproject.com/Tips/563919/Nested-Repeater-Controls-in-ASP-NET. http://everymanprogrammer.com/index.php/nested-repeaters-do-it-clean-and-simple-a-beginners-tutorial-part-2/
0
건물, 당신은에 전달할 수 있습니다 Page_Load
의 테이블 데이터를 ViewState 변수로 설정 한 다음 바인딩 할 때 검색 :
<%#Container.DataItem %>
에 중첩
<asp:Repeater>
제어의
DataSource
속성을 설정할 수 있도록 각 중첩 된 리피터 같은 단계를 수행으로
private DataTable GetCachedDataTable(string strTable)
{
DataTable dtableCached = (DataTable)this.ViewState[strTableCache];
return dtableCached;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.ViewState["TblTwo_Cache"] = null;
DataTable tblOne = new DataTable();
DataTable tblTwo = new DataTable();
myFunctionReturningTwoTables(ref tblOne, ref tblTwo);
// Bind the first one
if (tblOne != null)
{
// This first line assumes an <asp:Panel ID=pnlMain runat=server>
// tag is added in front of the Repeater1 tag in the ASPX markup, above,
// and an </asp:Panel> tag is after the last </asp:Repeater> tag
Repeater rptr = pnlMain.FindControl("Repeater1") as Repeater;
rptr.ItemDataBound += new RepeaterItemEventHandler(rptrItemDataBound);
rptr.DataSource = tblOne;
rptr.DataBind();
}
// Cache the 2nd (and others...) like this
if (tblTwo != null)
{
this.ViewState["TblTwo_Cache"] = tblTwo;
}
}
}
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater rptr2 = e.Item.FindControl("Repeater2") as Repeater;
if (rptr2 != null)
{
DataTable dt = new DataTable();
// Now, pull it out of cache
dt = GetCachedDataTable("TblTwo_Cache");
if (dt != null)
{
rptr2.DataSource = dt;
rptr2.DataBind();
}
}
}
}
0
당신이 강하게 데이터 형식을 입력 한 경우, 더 나은 <asp:Repeater>
컨트롤에서 사용할 수 ItemType
속성을 사용합니다.
코드 샘플 :
<asp:Repeater ID="associatedDataRepeater" runat="server">
<ItemTemplate>
<asp:Repeater runat="server" DataSource='<%#Container.DataItem %>'>
<ItemTemplate>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
관련 문제
- 1. 중첩 된 리피터
- 2. 중첩 된 리피터 -
- 3. 중첩 된 리피터
- 4. 중첩 된 리피터 - 데이터 그룹화
- 5. 변경 헤더 텍스트 내가 리피터 안에 중첩 된 gridview에있는 리피터
- 6. OMP C의 루프에 중첩 된
- 7. 자식 Repeater 컨트롤 숨기거나 중첩 된 리피터
- 8. 확인란을 선택 내부 중첩 된 리피터
- 9. ASP.NET 중첩 리피터 액세스 요소
- 10. C의 중첩 구조
- 11. ASP.Net 중첩 리피터 로직 지옥
- 12. jQuery 아코디언이있는 리피터 내부 리피터
- 13. C의 중첩 루프는 무엇입니까?
- 14. C의 중첩 매크로
- 15. 중첩 된 리피터 오류 : 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.
- 16. 중첩 리피터 - ItemCommand는 마크 업을 통해 부착 된 경우에만 실행됩니다.
- 17. 중첩 된 리피터 Asp .NET ItemDataBound가 호출되지 않았습니까?
- 18. 리피터 ASP VB.NET 리피터?
- 19. 리피터
- 20. 리피터
- 21. 리피터
- 22. 구조체 인스턴스를 C의 내부 중첩 구조체에 할당
- 23. 리피터 내부 리피터 - 부모 ID
- 24. 중첩 된 행에서 중첩 된 Gridview로 ID를 전달하는 방법은 무엇입니까?
- 25. GHC에서 중첩 된 UNPACK
- 26. Objective-C의 설정자와 함께 "alloc"을 중첩
- 27. Objective-C의 각 루프에 중첩 됨
- 28. GridView 리피터 페이징
- 29. QML 리피터 parentness
- 30. 리피터 내부에서 레이블이 리피터 내부에 보이지 않음
제가 중계기를 사용되기까지 필요한 데이터를 갖는 네 개의 테이블을 갖는다. (R1-T1, R2-T2, R3-T3, R4-T4). T1, T2, T3, T4는 모두 1 : M 관계의 외래 키를 사용하여 연결됩니다. 따라서 일단 부모 리피터가 채워지면 어떻게 그 특정 부모의 세부 정보를 자식 리피터로 추출 할 수 있습니까? 도와주세요. 감사합니다 :) @ Deepak.Aggrawal –
DataBinder.Eval (e.Item.DataItem, "T1")에 의해 DataBound에서 ID를 가져올 수 있으며 상위 ID를 기반으로 결과를 필터링 할 수 있습니다. –
중첩 된 중계기 (하위 중계기)는 상위 중계기와 관련된 세부 정보 만 표시해야합니다. 내가 어떻게 그걸 성취 할 수 있니? 네가 한 말을 더 자세히 설명해 주시겠습니까? 고맙습니다. @ Deepak.Aggrawal –