GridView e RowCommand

oraculum

Tagged:


Precisei de colocar um ButtonField / Image na minha GridView para poder excluir uma linha do grid, então percebi que o .Net não consegue trabalhar com os Image da forma correta, como é feita com o LinkButton isso ocorre por causa da forma que o controle é renderizado, veja abaixo:

ImageButton:

<input type="image" ... >

LinkButton:

<a onclick="javascript:__doPostBack(...)"><img src="..."></a>

A solução para isso é ridiculamente simples, é só colocar o controle em modo template e adicionar um LinkButton e dentro dele uma Imagem, assim:

<asp:LinkButton ID="imgRemover" runat="server" 
     CommandName="Remover" >
     <asp:Image ID="imgRemoverImage" ImageUrl="~/Resources/item_remove.gif" ToolTip="" runat="server" />
 </asp:LinkButton>

Depois se você precisar pegar o número da linha que foi clicada no grid você pode fazer isso:

1
2
3
4
5
6
7
8
9
10
11
12
    protected void gvSeriais_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName.Equals("Remover"))
        {
            // pegando a linha que foi clicada
            WebControl wc = ((WebControl)e.CommandSource);
            GridViewRow selectrow = ((GridViewRow)wc.NamingContainer);
            // pegando a celula que está a chave primaria (id)
            TableCell contactcell = selectrow.Cells[0];
            String serial = contactcell.Text.ToString();
        }
    }
Share Button

Leave a Reply