2012-05-25 13 views
6

Ho una vista a griglia con un collegamento ipertestuale nella prima colonna. Facendo clic sul collegamento ipertestuale, l'utente viene reindirizzato a Vendor.aspx. Ora, ho bisogno di passare l'id consumer (della riga cliccata) come stringa di query a Vendor.aspx.Aggiunta del parametro Querystring a GridView ItemTemplate

Qual è il metodo migliore per raggiungerlo? C'è un modo in cui possiamo gestirlo usando solo il codice di markup?

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

LETTURE:

  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

risposta

2

Provare a utilizzare il DataNavigateUrlFormatString

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

... sarà risparmiarvi Eval() e il problema con virgolette singole/doppie quando mettere all'interno della vostra href.

È possibile sostituire lo DataTextField se lo si desidera - Ho appena inserito il ID utente per coerenza con l'esempio.

+0

Grazie. Ho usato HyperLinkField simile a BoundField e ha funzionato. – Lijo

0

Si può fare lo stesso usando al 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

riscrivere il collegamento ipertestuale in GridView nel file aspx in questo modo:

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

Poi nel code-behind creare un gestore di eventi 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; 
    } 
} 

Spero che aiuti.

Problemi correlati