2013-05-06 5 views
0

우선 ASP 코드, 아래의 문제 설명.Gridview에 런타임에 Controlls를 추가하는 방법은 무엇입니까?

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

좋아, 그럼 코드 숨김에서 난 단지 행 당 하나 일 수있다 내가 ID_Contact, 이름의 Companydetails을 선택 내 데이터베이스,에서 선택을해야합니다. RowCreated 이벤트에서 실제 사용자의 UserID를 얻었으며 사용자가 가지고있는 모든 전자 메일을 선택하고 행당 0-10 개가 될 수 있습니다. 이제 내 문제는 : 내 코드의이 부분에 대한 설명에 onClick 이벤트와 함께 Linkbutton을 삽입 할 수 있습니까? 이처럼 는 :

     <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에 코드와 그 controlls를 추가 할. 이것이 가능합니까? This.GridViewContacs.Controlls.AddAt (인덱스의 LinkButton) 을뿐만 아니라 단서 여기 그것이 작동하는 방법 :

생각 나는 allready했다. 사전에

감사합니다,

나에게

답변

1

가장 쉬운이 ItemTemplate을 더 ID가없는 한, ItemTemplate을에 자리 표시 자 컨트롤을 추가하는 것입니다.

<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

Works, thanks alot;) abit를 확장하면 예제가 좋았습니다. – DatRid

관련 문제