2012-06-29 16 views
9

ogni riga nel mio gridview dovrebbe avere un pulsante/collegamento ipertestuale che naviga alla pagina? Id = qualcosa Poi c'è javascript che cattura il reindirizzamento e stampa la pagina come un iframe. Questo è qualcosa di già disponibile nella riga (ma nascosto). Quindi vorrei fare qualcosa come NavigateUrl = "~/Page.aspx? Id =" + Id.ToString() per ogni campo, ma la cosa è che l'Id è popolato in DataBind() da un'origine dati LINQ.Come aggiungere NavigateUrl di collegamento ipertestuale in GridView

<asp:GridView ID="gridleitNidurstada" runat="server" GridLines="None" AllowPaging="True" 
    CssClass="mGrid" PagerStyle-CssClass="pgr" DataKeyNames="Id" OnRowDataBound="gridLeit_RowDataBound" 
    AllowSorting="True" SortedAscendingHeaderStyle-CssClass="sortasc-header" SortedDescendingHeaderStyle-CssClass="sortdesc-header" 
    OnSorting="gridleitNidurstada_Sorting" CurrentSortField="Id" CurrentSortDir="Ascending" 
    AutoGenerateColumns="False"> 
    <Columns> 
     <asp:BoundField DataField="Id" HeaderText="Id" SortExpression="Id" Visible="false"/> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:HyperLinkField HeaderText="Print" Text="Print" **anything here?**/> 
    </Columns> 
    <PagerStyle CssClass="pgr"></PagerStyle> 
    <SortedAscendingHeaderStyle CssClass="sortasc-header"></SortedAscendingHeaderStyle> 
    <SortedDescendingHeaderStyle CssClass="sortdesc-header"></SortedDescendingHeaderStyle> 
</asp:GridView> 

Il collegamento è qualcosa del genere: potrei farlo lì? Oppure nell'evento rowbound?

IQueryable<model.SomeClass> someClass = 
    from m in preparePredicate() 
    select new model.SomeClass 
    { 
     Id = m.id, 
     ... 
    }; 
     gridleitNidurstada.DataSource = someClass; 
     gridleitNidurstada.DataBind(); 

risposta

12

È possibile utilizzare la seguente sintassi:

<asp:HyperLinkField DataNavigateUrlFields="col1,col2" DataNavigateUrlFormatString="gotopage.aspx?p1={0}&p2={1}" Text="Print"> 

Maggiori informazioni here e here su MSDN.

EDIT:


Se non si conosce l'URL esatto in cui la creazione della griglia, dovrete fare un po 'più di lavoro. Un esempio su cui ho lavorato questa settimana, utilizzando un itemtemplate. Ma per poter utilizzare questo, è necessario impostare EnableSortingAndPagingCallbacks a false. E fare un po 'di lavoro in più sul codice per questo. Ho usato solo il cercapersone sulla mia rete, quindi questo campione che posso fornire. Markup:

<asp:GridView ID="gridViewTicketsClosed" runat="server" CellPadding="4" ForeColor="#333333" 
    GridLines="None" EnableSortingAndPagingCallbacks="False" AutoGenerateColumns="False" 
    AllowPaging="True" OnRowDataBound="gridViewTicketsClosed_RowDataBound" OnPageIndexChanging="GridViewPageIndexChanging"> 
    <PagerSettings Mode="NextPrevious" NextPageText="Next" PreviousPageText="Previous" /> 
    <Columns> 
     <asp:BoundField DataField="TicketId" HeaderText="Nr."> 
      <ItemStyle Width="20px" /> 
     </asp:BoundField> 
     <asp:BoundField DataField="DateStarted" DataFormatString="{0:dd/MM/yyyy HH:mm}" HeaderText="Date"> 
      <ItemStyle Width="100px" /> 
     </asp:BoundField> 
     <asp:BoundField DataField="President" HeaderText="President"> 
      <ItemStyle Width="100px" /> 
     </asp:BoundField> 
     <asp:BoundField DataField="TicketTypeId" HeaderText="TicketType"></asp:BoundField> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:HyperLink ID="lnkActionLog" runat="server" Text="Log"></asp:HyperLink> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

codice dietro:

protected void gridViewTicketsClosed_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     var hyperLink = e.Row.FindControl("lnkActionLog") as HyperLink; 
     if (hyperLink != null) 
      hyperLink.NavigateUrl = CreateShowActionLogUrl(e.Row) + "?id="+ DataBinder.Eval(row.DataItem, "TicketId"); 
    } 
} 
+0

Dopo aver riletto la tua domanda, penso che tu sia soddisfatto del primo suggerimento che ho fatto, dal momento che il tuo url sarà sempre lo stesso. Solo il valore del queryparameter è diverso. – Koen

+0

sì, grazie, questo era esattamente ciò di cui avevo bisogno per questo caso, ma la tua modifica in realtà mi ha aiutato con un'idea di follow-up. – fogedi

5

Includi seguente nel NavigateUrl attributo

NavigateUrl='<%# Eval("Sl_no", 
       "frmAddIntake.aspx?id=Dashboard&intake_id={0}") %>' 
+0

Nota le virgolette singole – hanzolo

+0

Rupesh Più soluzioni, ha funzionato per me, ma era necessario per legare la colonna nascosta prima di non legare i dati direttamente dall'origine dati, grazie amico .. – Moe

0
<asp:TemplateField HeaderText = "Id" ItemStyle-Width="30"> 
      <ItemTemplate> 
       <asp:HyperLink runat="server" NavigateUrl='<%# Eval("TheQueryStringParameterComingFromDB", "~/PageYouWantTONavigateTo.aspx?Id={0}") %>' 
        Text='GiveTextYouWantToDisplay' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
+1

Ricordare di avvolgere il codice nel blocco di codice – James

0

funziona Questo semplicemente per me. Nient'altro richiesto.

<asp:HyperLink ID="HyperLink1" runat="server" 
         Text="URL Text" NavigateUrl='<%# "URL.aspx?your_parameter=" + Eval("ID") %>'></asp:HyperLink> 
Problemi correlati