如何在运行时向Gridview添加控件

本文关键字:Gridview 添加 控件 运行时 | 更新日期: 2023-09-27 18:12:29

首先是ASPcode,下面的问题描述。

<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,名称,公司的详细信息,这可以是每一行只有1。在RowCreated事件中,我获得实际用户的UserID,并选择该用户拥有的所有电子邮件,每行可以是0-10。现在我的问题是:我如何在描述中插入链接按钮的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>

所以我想添加这些控件与代码到THIS TemplateField。这可能吗?

我已经有了想法:Linkbutton This.GridViewContacs.Controlls.AddAt(索引)但这里也没有提示它应该如何工作。

提前感谢,

如何在运行时向Gridview添加控件

最简单的方法是给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);
    }
}

当然,这个例子被简化了。