2011-12-13 36 views
14

tengo un GridView que se ve algo como esto:caso GridView RowCommand no disparar

<asp:GridView 
    ID="GridView1" 
    AllowPaging="true" 
    OnRowCommand="RowCommand" 
    OnPageIndexChanging="gridView_PageIndexChanging" 
    Runat="server"> 
    <Columns> 
     ... 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:Button ID="Button1" ButtonType="Button" CommandName="ItemExport" CommandArgument='<%# Eval("EXPORT") %>' 
        Text="Export" runat="server" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     ... 
    </Columns> 
</asp:GridView> 

Aquí es RowCommand:

protected void RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "ItemExport") 
    { 
     // etc. 
    } 
} 

Al hacer clic en el botón no está disparando el evento RowCommand en absoluto. Sin embargo, RowCommand se dispara cuando hago clic en un índice de página en el buscapersonas de GridView.

+1

¿Cuándo vincula su cuadrícula al DataSource, solo 'if (! Postback)' ?! –

+0

Sí, el problema era que el enlace no estaba incluido en una declaración 'if (! IsPostBack)'. –

Respuesta

43

Debe no vincular a su cuadrícula en las devoluciones de datos en Load, sólo cuando algo cambió que hace que la cuadrícula para recargar los datos (f.e. Sorting, buscapersonas) y sólo en caso de manipuladores adecuados.

Otra posible razón: ¿Ha desactivado ViewState en algún lugar?

+6

No puedo creer que esto me persiguiera por horas ... simplemente sentado aquí mirando fijamente a un código ASP.NET que no funciona ... todo porque había configurado EnableViewState = "false": @ – series0ne

+1

Cuando enlace GridView en if (!IsPostBack), el buscapersonas no funciona :( –

+1

@MazdakShojaie Tiene que agregar un controlador de eventos para el evento GridView.PageIndexChanged y volver a enlazar en ese controlador. Consulte este artículo de MSDN http://msdn.microsoft.com/en-us /library/system.web.ui.webcontrols.gridview.pageindexchanged(v=vs.110).aspx – Zack

4

Acabo de tener un colega que se encontró con el mismo problema; la suya fue causada por el atributo onrowcommand= que no se configuró en el elemento asp:GridView. Esto debe configurarse con el nombre del controlador que manejará el evento.

... ¡por si acaso alguien tiene el mismo problema!

1

También puede consultar el HttpContext.Current.Request.Form ["__ EVENTTARGET"] y si finaliza con el ID del control, vuelva a enlazar el GridView y use Page.FindControl con el destino del evento para encontrar el control que se activó el evento

3

Use CausesValidation="false" en la etiqueta del botón. Puede resolver el problema.

2

si su código como este:

protected void Page_Load(object sender, EventArgs e) 
{ 
    BindGrid(dgv); 
    if (!IsPostBack) 
    { 



    } 




} 

poner en el BindGrid() dentro de la {line isposback}

2

Ponga la grid.Databind() dentro if (!IsPostBack)

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     grid.DataBind(); 
    } 
} 
0

Mi problema era requiredfieldvalidator

Solución para t hat was: Lo deshabilito en la publicación posterior y luego lo vuelvo a habilitar después del comando row.

0

Ha intentado las respuestas anteriores y todavía no se ha podido recuperar una publicación. Terminó siendo un único ID problema. Tenía dos <ItemTemplate> con botones que tenían los mismos identificadores. (En diferentes vistas de la cuadrícula. Mi segundo estaba en un control de usuario)

Al cambiar el <asp:Button ID="" /> a un ID único, se solucionó el problema de devolución de mi publicación.

Solo pensé en publicar para cualquier otra persona que haya probado las otras opciones sin tener suerte.

Cuestiones relacionadas