2012-05-25 20 views
6

Tengo una vista de cuadrícula con un hipervínculo en la primera columna. Al hacer clic en el hipervínculo, el usuario se redirige a Vendor.aspx. Ahora, necesito pasar la identificación del consumidor (de la fila cliqueada) como una cadena de consulta a Vendor.aspx.Agregar el parámetro Querystring a GridView ItemTemplate

¿Cuál es el mejor método para lograrlo? ¿Hay alguna manera de que podamos manejarlo utilizando solo código de marcado?

<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> 

LECTURAS:

  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

Respuesta

2

Trate de usar el DataNavigateUrlFormatString

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

... que ahorraré Eval() y el problema con comillas simples/dobles cuando se lo ponga dentro de su href.

Puede sustituir el DataTextField si lo desea - Acabo de poner el ConsumerID para que sea consistente con su ejemplo.

+0

Gracias. Utilicé HyperLinkField similar a BoundField y funcionó. – Lijo

0

Puede hacerlo utilizando al mismo 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

Vuelva a escribir su hipervínculo en gridview en el archivo .aspx como esto:

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

Luego, en código subyacente crear un controlador de eventos 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; 
    } 
} 

Espero que ayude.

Cuestiones relacionadas