在GridView中为每一行构建HyperLink

时间:2014-11-11 21:12:24

标签: c# gridview hyperlink

我有一个名为" BasketGrid"的GridView。其中包含用户选择购买的产品的信息。我添加了一个名为" EditProdOpts"的超链接。到产品选项列,以便用户可以在完成结帐流程之前返回产品页面进行更改(如果需要)(URL不在数据库中,因此我无法在GridView中将其作为HyperLinkField)。

我目前有一个功能设置,应该为HyperLink设置正确的URL,但它只能部分工作。目前,它将HyperLink的每个实例设置为GridView中最后一个产品的URL。我不知道我错过了什么,但是......

这是功能:

    protected string BuildLink(object dataItem)
    {
        string ProductLink = "";
        foreach (GridViewRow basketRow in BasketGrid.Rows)
        {
            BasketItem item = (BasketItem)dataItem;
            if ((item.OrderItemType == OrderItemType.Product))
            {
                HyperLink optionsLink = (HyperLink)basketRow.FindControl("EditProdOpts");
                if (optionsLink != null)
                {
                    optionsLink.NavigateUrl = string.Format("~/Admin/orders/Create/CreateOrderAddProduct.aspx?Action=Edit&UID={0}&LineID={1}&ProdId={2}", _UserId, item.BasketItemId, item.ProductId);
                    ProductLink = optionsLink.NavigateUrl;
                }
            }
        }
        return ProductLink;
    }

这是HyperLink在GridView中的位置:

                    <asp:TemplateField HeaderText="Item">
                        <HeaderStyle CssClass="columnHeader" HorizontalAlign="left" VerticalAlign="top" />
                        <ItemStyle HorizontalAlign="Left" />
                        <ItemTemplate>
                            <uc:BasketItemDetail ID="BasketItemDetail1" runat="server" BasketItem="<%# Container.DataItem %>" LinkProducts="false" /><br /><%# Container.DataItem %>
                                <asp:PlaceHolder ID="EditOptPanel" runat="server" Visible='<%# ShowOptionsLink(Container.DataItem) %>'>
                                    <asp:HyperLink ID="EditProdOpts" runat="server" Text="Edit Options" NavigateUrl='<%# BuildLink(Container.DataItem) %>' />
                                </asp:PlaceHolder>
                        </ItemTemplate>
                    </asp:TemplateField>

1 个答案:

答案 0 :(得分:0)

您不需要循环遍历GridView的行。

每行都会调用一次函数。

您可能根本不需要您的功能。查看DataNavigateUrlFormatString属性:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.hyperlinkfield.datanavigateurlformatstring%28v=vs.110%29.aspx