Gridview rowdatabound错误:具有相同ID的多个控件' hlLink'被找到。 FindControl要求控件具有唯一ID

时间:2013-12-07 08:51:10

标签: c# asp.net gridview

我有一个gridview,其中包含要在页面上呈现的链接和描述。

在.aspx

中的gridview中编写了以下代码
      <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <p>
                    <asp:HyperLink ID="hlLink" runat="server" Target="_self"></asp:HyperLink></p>
            </ItemTemplate>
            <ItemTemplate>
                <p>
                    <asp:Literal ID="litSummary" runat="server"></asp:Literal></p>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <AlternatingItemTemplate>
                <p>
                    <asp:HyperLink ID="hlLink" runat="server" Target="_self"></asp:HyperLink></p>
            </AlternatingItemTemplate>
            <AlternatingItemTemplate>
                <p>
                    <asp:Literal ID="litSummary" runat="server"></asp:Literal></p>
            </AlternatingItemTemplate>
        </asp:TemplateField>
    </Columns> 

以及.aspx.csin gridview rowdataboundevent

    protected void gvResults_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            SearchResultItem data = (SearchResultItem)e.Row.DataItem;
            HyperLink hlLink = (HyperLink)e.Row.FindControl("hlLink");
            Literal litSummary = (Literal)e.Row.FindControl("litSummary");
            if (data.Description != null)
            {
                hlLink.Text = data.Title;
                hlLink.NavigateUrl = data.Path.Replace("&amp;", "&");
                litSummary.Text = data.Description;
            }
            else
            {
                hlLink.Text = data.Path;
                hlLink.NavigateUrl = data.Path.Replace("&amp;", "&");
                litSummary.Text = data.Path;
            }

        }

此处SearchResultItem:是包含链接和描述详细信息的结果项。 第一次调用行绑定事件时,它会正确绑定数据,第二次调用时抛出错误“找到具有相同ID的多个控件'hlLink'。FindControl要求控件具有唯一ID。

请告诉我代码中的错误。

由于

1 个答案:

答案 0 :(得分:1)

问题:您正尝试多次创建具有相同ID的相同控件。

解决方案:您需要在创建控件之前将其删除。

试试这个:

void RemoveControls()
    {
    HyperLink l1 = (HyperLink)Page.FindControl("hlLink"); 
    Literal l2 = (Literal)Page.FindControl("litSummary"); 


    if(l1!= null)
        Page.Controls.Remove(l1);

    if(l2!= null)
        Page.Controls.Remove(l2);        
    }

解决方案2:中继器控制的分页。 要在pagination控制中实施Repeater,您需要创建PagedDataSource

试试这个:

PagedDataSource pds = new PagedDataSource();
pds.DataSource = ds.Tables[0].DefaultView; 
pds.AllowPaging = true;
pds.PageSize = 8;//page sizes