2014-10-03 58 views
0

我拼命地尋求枉費。我想將用戶控件列表(T)(.ascx)綁定到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控件:

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

與條件If (!IsPostBack) Page_Load事件。這不起作用:顯示對象的表示。而當我把控件放在一個面板中時,一切都奏效了。

+1

爲什麼你想要他們在一個GridView?這有什麼用途?爲什麼不把它們放在面板中? – mason 2014-10-03 17:34:23

+0

由n個元素分頁:/ – Rikimaru 2014-10-03 17:39:11

+0

我想你在這裏有一個[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 – mason 2014-10-03 17:39:47

回答

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()