2011-01-26 8 views
2

я получил GridView в ASP.Net, в котором пользовательский элемент управления размещен:DataBind Органы управления в Gridview

<asp:GridView ID="GVWunitcollection" 
     CssClass="gridview" 
     runat="server" 
     ShowHeader="false" 
     ShowFooter="false" 
     AutoGenerateColumns="False"> 
     <HeaderStyle CssClass="headerstyle" /> 
     <RowStyle CssClass="rowstyle row" /> 
     <FooterStyle CssClass="rowstyle row" /> 
     <Columns> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <uc:Unit ID="UNTcol" runat="server" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
</asp:GridView> 

Я связать GridView с List<T> наполненной пользовательских классов «блок». Каждый блок состоит из нескольких свойств для заполнения пользовательского контроля. (Пользовательский элемент управления содержит таблицу, а также некоторые ярлыки и текстовые поля). Как я могу это достичь? Есть ли простой способ привязать каждый пользовательский контроль к соответствующему блоку?

Кстати, это мой способ имитировать «динамическое» поведение нескольких пользовательских элементов управления на странице. Если есть более простой способ, я хотел бы знать, как это сделать!

спасибо!

ответ

0

Вы можете создать общедоступные свойства своего пользовательского контроля и присвоить их значения в событии OnRowDataBound gridview.

У меня есть пост, который обрисовывает в общих чертах, как я обрабатывать динамические UserControls here

Надежда, что помогает!

2

Вы должны обработать событие OnRowDataBound, а затем использовать свойство FindControl и DataItem в аргументе события для извлечения данных, на которые вы привязываетесь. Вы должны предоставить свойствам пользовательского элемента управления для присвоения значений. Вот пример:

<asp:GridView ID="gvTest" runat="server" EnableViewState="false" 
OnRowDataBound="gvTest_RowDataBound" AutoGenerateColumns="false"> 
<Columns> 
    <asp:TemplateField> 
     <ItemTemplate> 
      <asp:Label ID="lblTest" runat="server"></asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 
</Columns> 


protected void Page_Load(object sender, EventArgs e) 
{ 
    gvTest.DataSource = new[] { 1, 2, 3, 4 }; 
    gvTest.DataBind(); 
} 

protected void gvTest_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     int item = (int)e.Row.DataItem; 
     Label lblTest = (Label)e.Row.FindControl("lblTest"); 
     lblTest.Text = item.ToString(); 
    } 
} 

Вместо ИНТ вы должны бросить к специфическому типу данных и вместо ярлыка вы должны бросить к вашему типу пользовательского элемента управления. Вместо свойства «Ярлык текст» вы должны оценить свойство, которое вы выставили из своего пользовательского элемента управления.

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