2014-10-03 2 views
0

필사적으로 헛수고로 탐색합니다. 사용자 정의 컨트롤 (.ascx)의 List (T)를 gridview에 바인딩하고 싶습니다. 나는 코드 숨김에서 내 컨트롤을 초기화 :사용자 목록을 gridview에 바인딩

List<myControl> ctrls = new List<myControl>(); 
myControl ctr = LoadControl("~/Control.ascx") as myControl; 
ctr.Name = ... 
// ... 
ctrls.Add(myControl); // add new control to the collection 

그리고 이후, 난 GridView 컨트롤이 목록에 바인딩 : 조건 If (!IsPostBack)와 Page_Load 이벤트에서

this.GridView1.DataSource = ctrls; 
this.gridView1.DataBind(); 

합니다. 이 작동하지 않습니다 : 개체의 표현이 표시됩니다. 패널에 컨트롤을 넣었을 때 모두 효과가있었습니다.

+1

GridView에서 왜 필요합니까? 그 목적은 무엇입니까? 왜 그냥 패널에 두지 않습니까? – mason

+0

n 개의 요소로 페이징하기 :/ – Rikimaru

+0

여기에 [XY 질문] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)이 있다고 생각합니다. – mason

답변

0

GridView를 사용하지 마십시오. Repeater을 사용하십시오. 그리고 컨트롤 목록이 아닌 데이터에 바인딩하십시오. 예 :

<asp:Repeater runat="server" id="ControlsRepeater"> 
    <ItemTemplate> 
     <uc:MyControl runat="server" /> 
    </ItemTemplate> 
</asp:Repeater> 

코드는 페이징을 원하는 경우

protected void Page_Load(object sender, EventArgs e) 
    { 
    if(!IsPostBack) 
     { 
     var myData=GetData(); //should return some type of ICollection representing your data to bind to 
     ControlsRepeater.DataSource=myData; 
     ControlsRepeater.DataBind(); 
     } 
    } 

뒤에, 당신은 lazy loading을 활용 (당신이 것을 사용하는 경우 Entity Framework가 당신을 위해 이것을 처리)과의 LINQ 기능 .Take() and .Skip()한다.

관련 문제