2008-10-23 59 views
9

Tengo GridView, que puedo seleccionar una fila. Luego tengo un botón sobre la cuadrícula llamado Editar en el que el usuario puede hacer clic para abrir una ventana emergente y editar la fila seleccionada. Por lo que el botón no tendrá código Javascript detrás de él a lo largo de las líneas deObtener GridView fila seleccionada DataKey en Javascript

function editRecord() 
{ 
    var gridView = document.getElementById("<%= GridView.ClientID %>"); 
    var id = // somehow get the id here ??? 
    window.open("edit.aspx?id=" + id); 
} 

La pregunta es ¿cómo puedo recuperar el ID de registros seleccionados en javascript?

Respuesta

9

Lo resolví según la respuesta de JasonS. Lo que hice fue crear un campo oculto en la vista de cuadrícula como esto:

<asp:TemplateField ShowHeader="False"> 
    <ItemTemplate> 
     <asp:HiddenField ID="hdID" runat="server" Value='<%# Eval("JobID") %>' /> 
    </ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField Visible="False"> 
    <ItemTemplate> 
     <asp:LinkButton ID="lnkSelect" runat="server" CommandName="select" Text="Select" /> 
    </ItemTemplate> 
</asp:TemplateField> 

Luego, en el OnRowDataBind tener código para establecer la fila seleccionada

protected virtual void Grid_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     // Click to highlight row 
     Control lnkSelect = e.Row.FindControl("lnkSelect"); 
     if (lnkSelect != null) 
     { 
      StringBuilder click = new StringBuilder(); 
      click.AppendLine(m_View.Page.ClientScript.GetPostBackClientHyperlink(lnkSelect, String.Empty)); 
      click.AppendLine(String.Format("onGridViewRowSelected('{0}')", e.Row.RowIndex)); 
      e.Row.Attributes.Add("onclick", click.ToString()); 
     } 
    }    
} 

Y luego en el Javascript tengo código como este

<script type="text/javascript"> 

var selectedRowIndex = null; 

function onGridViewRowSelected(rowIndex) 
{   
    selectedRowIndex = rowIndex; 
} 

function editItem() 
{ 
    if (selectedRowIndex == null) return; 

    var gridView = document.getElementById('<%= GridView1.ClientID %>');     
    var cell = gridView.rows[parseInt(selectedRowIndex)+1].cells[0];   
    var hidID = cell.childNodes[0];   
    window.open('JobTypeEdit.aspx?id=' + hidID.value); 
} 

</script> 

trabaja un convite :-)

+0

Eso es básicamente cómo hago esto. – EndangeredMassa

+0

¿Qué es m_View? No sé qué quiero poner en ese lugar. – Bharathi

+0

Probablemente pueda deshacerse de m_View y debería funcionar. Este código usaba el patrón MVP y era un poco diferente. – Craig

1

1) cambiar su función javascript para usar un parámetro

function editRecord(clientId) 
{ .... 

2) salida de la llamada en el botón editRecord ... si se quiere evitar el trato con el .NET generado ids, sólo tiene que utilizar un simple

<input type="button" onclick="editRecord(your-rows-client-id-goes-here)" /> 
+0

Esto funciona si tengo un botón de edición en cada fila. Pero solo tengo 1 botón de edición en toda la página en una barra de herramientas sobre la grilla. Entonces, el flujo de trabajo es que alguien selecciona un registro y luego hace clic en editar en la barra de herramientas. No hay forma de pasar el id a la función editRecord. – Craig

+0

Estoy de acuerdo con JasonS a continuación como un buen enfoque. –

+0

¿cómo puedo obtener la identificación del cliente de filas aquí, Dave? – Eric

1

Basa en sus comentarios a la respuesta de @ DaveK, en javascript se puede establecer el id de un campo oculto a la clientId de la fila seleccionada cuando el usuario lo selecciona. Luego haga que su función editRecord use el valor establecido en el campo de formulario oculto.

0

se podría evitar por completo el javascript, mediante el establecimiento de etiquetas de anclaje previamente con la cadena de consulta para cada fila (aunque esto afectará a su disposición de la tabla, necesitará sólo un clic en lugar de 2 por parte del usuario)

inserto en la plantilla gridview:

<asp:HyperLink runat="server" ID="editLink" Target="_blank" 
    NavigateURL='<%# Eval("JobID","edit.aspx?id={0}") %>'> 
    Edit.. 
</asp:HyperLink> 
Cuestiones relacionadas