2012-05-25 128 views
6

我有一个第一列有超链接的gridview。点击超链接后,用户被重定向到Vendor.aspx。现在,我需要将消费者id(被点击的行)作为查询字符串传递给Vendor.aspx。将查询字符串参数添加到GridView项目模板

实现它的最佳方法是什么?有没有一种方法可以使用标记代码来处理它?

<asp:GridView ID="grdConsumers" runat="server" AutoGenerateColumns="False" 
       EnableViewState="True" > 
       <Columns> 

        <asp:TemplateField HeaderText="ConsumerID" SortExpression="ConsumerID" > 
        <ItemTemplate> 
         <asp:HyperLink ID="lnkConsumerID" href="Vendor.aspx" runat="server"><%# Eval("ConsumerID")%></asp:HyperLink> 
        </ItemTemplate> 
        </asp:TemplateField> 



        <asp:BoundField HeaderText="Status" DataField="Status" SortExpression="Status"></asp:BoundField> 
       </Columns> 
      </asp:GridView> 

READINGS:

  1. Set Gridview DataNavigateUrlFormatString Dynamically inside User Control(ASCX)

  2. How do I add "&Source" to DataNavigateUrlFormatString?

  3. Select row in GridView with JavaScript

  4. How to bind the URL of a GridView HyperLinkField when the bound value contains a colon?

  5. asp.net gridview DataNavigateUrlFormatString from DataSource

回答

2

尝试使用DataNavigateUrlFormatString

<ItemTemplate> 
    <asp:HyperLinkField DataNavigateUrlFields="ConsumerID" DataTextField="ConsumerID" DataNavigateUrlFormatString="Vendor.aspx?id={0}" /> 
</ItemTemplate> 

...这将免去你​​,并把它当单/双引号的问题,您href内。

如果您愿意,您可以用DataTextField替代 - 我只是将ConsumerID与您的示例保持一致。

+0

谢谢。我使用类似于BoundField的HyperLinkField,它工作。 – Lijo

0

可以使用在Grid view Item Data Bound Event

protected void grdConsumers_ItemDataBound(object sender,DataGridItemEventArgs e) 
    { 
     if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      // Get your consumerId here  
      ((HyperLink)e.Item.FindControl("Edit")).NavigateUrl = "Vendor.aspx?id=" + consumerId 
     } 
    } 
1

改写GridView的超链接在.aspx文件中是这样做的一样:

<asp:HyperLink ID="lnkConsumerID" runat="server" Text='<%# Eval("ConsumerID")%>' /> 

然后在后台代码创建一个RowDataBound事件处理程序:

protected void grdConsumers_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType != DataControlRowType.DataRow) return; 
    var hlnkhlnk = (HyperLink)e.Row.FindControl("lnkConsumerID"); 
    if (hlnkhlnk != null) 
    { 
     hlnkhlnk.NavigateUrl = "Vendor.aspx" + "?Consumer ID=" + hlnkhlnk.Text; 
    } 
} 

希望它有帮助。

相关问题