2014-10-03 3 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(); 

В случае Page_Load с условием If (!IsPostBack). Это не работает: отображается представление объекта. Если я поставил элементы управления в Panel, все сработало.

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

Смежные вопросы