2013-05-06 5 views
0

Прежде всего ASPcode, описание проблемы ниже.Как добавить элементы управления во время выполнения в Gridview?

<asp:GridView ID="GridViewContacts" runat="server" ForeColor="#333333" DataKeyNames="L_ID_CONTACT" AllowPaging="True" AllowSorting="True" 
       OnPageIndexChanging="GridViewContacts_PageIndexChanging" PageSize="25" AutoGenerateColumns="False" OnRowCommand="GV_Contacts_RowCommand" > 
        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> 
        <Columns> 
         <asp:TemplateField HeaderText="Edit"> 
          <ItemTemplate> 
           <asp:LinkButton ID="LinkButtonEdit" runat="server" CommandArgument="Edit" CommandName="Edit" Text="Edit">Edit</asp:LinkButton> 
          </ItemTemplate> 
         </asp:TemplateField> 
         <asp:TemplateField HeaderText="View"> 
          <ItemTemplate> 
           <asp:LinkButton ID="LinkButtonView" runat="server" CommandArgument="View" CommandName="View" Text="View">View</asp:LinkButton> 
          </ItemTemplate> 
         </asp:TemplateField> 
         <asp:TemplateField HeaderText="Name"> 
          <ItemTemplate> 
           <asp:Label ID="L_Name" runat="server" Text='<%# Eval("L_Name") %>'></asp:Label> 
          </ItemTemplate> 
         </asp:TemplateField> 
         <asp:TemplateField HeaderText="Companydetails"> 
          <ItemTemplate> 
           <asp:Label ID="L_Companydetails" runat="server" Text='<%# Eval("L_Companydetails") %>'></asp:Label> 
          </ItemTemplate> 
         </asp:TemplateField> 
         <asp:TemplateField HeaderText="EMail"> 
          <ItemTemplate> 

          </ItemTemplate> 
         </asp:TemplateField> 

         <asp:TemplateField Visible="False" HeaderText="ID_CONTACT" > 
          <ItemTemplate> 
           <asp:Label Visible="false" ID="L_ID_CONTACT" runat="server" Text='<%# Eval("L_ID_CONTACT") %>' /> 
          </ItemTemplate> 
         </asp:TemplateField>        
        </Columns>       
        <%-- //Stylesettings here--%> 
       </asp:GridView> 

Хорошо, тогда в CodeBehind у меня Выберите из моей базы данных, где я выбрать ID_Contact, Имя, Companydetails, который может быть 1 на Роу только. В событии RowCreated я получаю UserID фактического Пользователя, и я выбираю все E-Mails, которые пользователь имеет, может быть 0-10 за строку. Теперь моя проблема: Как я могу вставить Linkbuttons с onClick-событием в описание в эту часть моего кода? Как это:

     <asp:TemplateField HeaderText="EMail"> 
          <ItemTemplate> 
           <asp:LinkButton[i] runat="server" onClick="SendEmail"> 
           </asp:Linkbutton[i]> 
           <asp:LinkButton[i] runat="server" onClick="SendEmail"> 
           </asp:Linkbutton[i]> 
          </ItemTemplate> 
         </asp:TemplateField> 

Так я хочу, чтобы добавить эти контролирующие с кодом в ЭТУ TemplateField. Возможно ли это?

Мысли я Allready были: This.GridViewContacs.Controlls.AddAt (индекс, LinkButton) Но и не догадывается здесь, как она должна работать.

Спасибо заранее,

мне

ответ

1

Проще всего добавить элемент управления замещающий к ItemTemplate, поскольку ItemTemplate не имеет ID.

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:PlaceHolder ID="emails" runat="server"></asp:PlaceHolder> 
    </ItemTemplate> 
</asp:TemplateField> 

, а затем в случае RowDataBound

if (e.Row.RowType == DataControlRowType.DataRow) 
{ 
    PlaceHolder emails = e.Row.FindControl("emails") as PlaceHolder; 

    if (emails != null) 
    { 
     LinkButton lbEmail = new LinkButton(); 
     lbEmail.Text = "your text"; 
     lbEmail.Click += new EventHandler(SendEmail); 

     emails.Controls.Add(lbEmail); 
    } 
} 

Конечно, пример упрощен. Вы можете легко расширить его до ваших потребностей.

+0

Спасибо за ответ, я проверю его как можно скорее :) – DatRid

+0

Работает, спасибо большое;) Увеличено его abit, пример хороший. – DatRid

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