我有一个名为" 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>
答案 0 :(得分:0)
您不需要循环遍历GridView的行。
每行都会调用一次函数。
您可能根本不需要您的功能。查看DataNavigateUrlFormatString属性: