Mi GridView es el siguiente, tiene una columna Detalles de entrenamiento con HyperLink

<asp:GridView ID="gvTrainingItems" runat="server"....
......
......
<asp:TemplateField HeaderText="Training Details" HeaderStyle-Wrap="true">
    <ItemTemplate>
        <asp:HyperLink ID="lnkTrainingItemDetails" runat="server" NavigateUrl='<%#"~/TrainingItemDetails.aspx?ItemId=" + DataBinder.Eval(Container.DataItem,"itemId").ToString().Trim() + "&EmpId=" + Request.QueryString["EmpId"].ToString() %>'
        Name='link' CssClass="btn btn-info" Target="_blank">View</asp:HyperLink>
    </ItemTemplate>
    <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="False"></ItemStyle>
</asp:TemplateField>
....

En este momento estoy confundido sobre cómo obtener el valor NagivateUrl de este GridViewRow?

He intentado algo como

GridViewRow row = gvTrainingItemsPending.Rows[e.RowIndex];
.....
((HyperLink) row.Cells[10].Controls[0]).NavigateUrl 

Pero devuelve el siguiente error. ¿Puedo obtener ayuda? ¡Gracias!

No se puede convertir el objeto de tipo 'System.Web.UI.LiteralControl' para escribir 'System.Web.UI.WebControls.HyperLink'.

1
joseph.c 26 oct. 2017 a las 20:24

3 respuestas

La mejor respuesta

Puede considerar usar el método FindControl para sacar esto. Esto extraerá el control independientemente de la celda en la fila.

GridViewRow row = gvTrainingItems.Rows[e.RowIndex];
.....
string url = ((HyperLink) row.FindControl("lnkTrainingItemDetails")).NavigateUrl;
1
Kirk 26 oct. 2017 a las 17:53

Use el método findcontrol para obtener la identificación de control y su valor.

0
Mahesh Gehlot 26 oct. 2017 a las 19:56

Estaba mirando el GridView incorrecto, por lo tanto, el número de celda es incorrecto, también es controles [1] en mi caso. La sintaxis es correcta aunque.

0
joseph.c 26 oct. 2017 a las 17:51