2011-05-11 34 views
6

Tengo una pregunta sobre el comando detrás de un ButtonField (tipo de imagen) en un GridView.Comando detrás de un GridView ButtonField

Obtuve un GridView llamado gvIngevuld en el que muestro filas de datos y 1 fila de ButtonField. Ahora tengo que poner código detrás de estos botones (cada uno de ellos es el mismo) para poner algunas cosas en formato PDF. ¿El problema es que no sé cómo poner el código detrás de estos botones? El código que tiene:

<asp:ButtonField ButtonType="Image" ImageUrl="~/Images/pdf.png" CommandName="pdf_click" /> 

Como se puede ver que utilizaron la propiedad = CommandName "pdf_click", pero cuando hago clic en uno de los botones que sólo hay una devolución de datos, pero no pasa nada. ¿Alguien que pueda ayudarme aquí?

en caso de que sea necesario, código detrás:

protected void pdf_click(object sender, EventArgs e) 
{ 
    lblWelkom.Text = "Succes!"; 
} 

Gracias.

+0

Intente cambiar CommandName por onclick y vea si eso lo soluciona. Además, puede necesitar agregarle runat = "server". Sé que lo hicimos por un botón oculto, pero eso fue solo por la manera específica en que lo conectamos. – Robert

Respuesta

28

Debe usar el evento RowCommand de gridview. Establezca el comandoArgumento en la clave única de su elemento. (Por defecto, se pasa el índice de la fila)

void gvIngevuld_RowCommand(Object sender, GridViewCommandEventArgs e) 
{ 
// If multiple buttons are used in a GridView control, use the 
// CommandName property to determine which button was clicked. 
if(e.CommandName=="pdf_click") 
    { 
    // Convert the row index stored in the CommandArgument 
    // property to an Integer. 
    int index = Convert.ToInt32(e.CommandArgument); 

    // Retrieve the row that contains the button clicked 
    // by the user from the Rows collection. 
    GridViewRow row = gvIngevuld.Rows[index]; 
    //gbIngevuld is your GridView's name 

    // Now you have access to the gridviewrow. 
    } 
} 

También, Si ha establecido la DataKeyNames del gridview, se puede acceder a ella de la siguiente manera:

int index = Convert.ToInt32(e.CommandArgument); 
    int ServerID = Convert.ToInt32(GridView1.DataKeys[index].Value); 
0

La propiedad CommandName no define el método para llamar. Para eso, necesita crear un método que esté vinculado al evento de comando del control.
No sé mucho acerca de GridViews, pero me parece que la forma más fácil de hacerlo sería seleccionarlo en la vista de diseño en Visual Studio, ir a propiedades, hacer clic en el botón de eventos (parece un rayo) y haga doble clic en la propiedad del evento RowCommand. Esto debería crear automáticamente un método que esté vinculado a un evento de botón de comando.
Puede usar el parámetro GridViewCommandEventArgs para acceder a las propiedades CommandName, CommandArgument y CommandSource para determinar qué botón provocó que se desencadene el evento.

0

Sólo una adición, escribí y trató exactamente de la misma, sin embargo el botón aún no funciona ...

... Tomó algún tiempo hasta que me di cuenta que se me olvidó una cosa, que era OnRowCommand="<YourGridViewName>_RowCommand" interior su elemento GridView en el archivo **. cs *