0

首先是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 中,我从我的数据库中有一个 Select,我在其中选择 ID_Contact、名称、Companydetails,每行只能是 1 个。在 RowCreated 事件中,我获得了实际用户的用户 ID,并选择了用户拥有的所有电子邮件,每行可以是 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.GridViewContacs.Controlls.AddAt(index,Linkbutton) 但也不知道它应该如何工作。

提前致谢,

4

1 回答 1

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);
    }
}

当然,这个例子被简化了。您可以轻松地将其扩展到您的需求。

于 2013-05-06T14:47:29.287 回答