我拼命地寻求徒劳。我想将用户控件的List(T)( .ascx )绑定到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事件中。这不起作用:显示对象的表示。然而,当我将控件放在Panel中时,一切都有效。
答案 0 :(得分: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()。