GridView - Selecionar a linha clicando em qualquer coluna

23/04/2009

Boa tarde, gostaria de saber se ha como selecionar uma linha de um gridview, realçando a cor da mesma, clicando em qualquer posição da linha, ou seja nao utilizar a opção padrão que seria colocando um botão em cada linha e nem deixando cada campo como se fosse um link. Grato, Fabricio
Fabricio Santos

Fabricio Santos

Curtidas 0

Respostas

Fabio Mans

Fabio Mans

23/04/2009

Olá no evendo RowDataBound do seu Grid digite o código abaixo.

Com isso, em qualquer lugar do seu grid quando o usuário passar o mouse irá trocar a cor, escolha a sua cor preferida e troque no backgroundColor.




 protected void gvSetor_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        switch (e.Row.RowType)
        {
            case DataControlRowType.DataRow:
                if (e.Row.RowIndex % 2 == 1)
                {
                    e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='#F9FFEF'");
                }
                else
                {
                    e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='#EAEFE0'");
                }
                e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='#dcdcdc'");
                break;
        }
    }


É isso que você precisa?

Fabio.



GOSTEI 0
Fabricio Santos

Fabricio Santos

23/04/2009

Boa noite, funcionou a mudança de cor da linha, mas alem disso também preciso disparar um evento ao clicar em qualquer lugar da linha, se possível também gostaria de mudar o desenho do ponteiro do mouse de setinha para maosinha Grato Fabricio
GOSTEI 0
Fabio Mans

Fabio Mans

23/04/2009

Segue abaixo.


 protected void gvwPalavroes_RowDataBound(object sender, GridViewRowEventArgs e)
    {
      
        if (e.Row.DataItemIndex != -1)
        {
            e.Row.Attributes.Add("onclick", ClientScript.GetPostBackEventReference(gvwPalavroes, "Edit$" + e.Row.RowIndex));
            e.Row.Attributes.Add("onMouseover", "this.style.background='#FCF3C4';this.style.cursor='hand'");

            //Verifica se a linha é alternada e aplica o estilo
            if (e.Row.RowState == DataControlRowState.Alternate)
            {
                e.Row.Attributes.Add("onMouseout", "this.style.background='#FFFFFF';this.style.cursor='hand'");
            }
            else
            {
                e.Row.Attributes.Add("onMouseout", "this.style.background='#F5F2E9';this.style.cursor='hand'");
            }

        }



    }

    protected void gvwPalavroes_RowEditing(object sender, GridViewEditEventArgs e)
    {
        int Codigo = Convert.ToInt32(gvwPalavroes.DataKeys[e.NewEditIndex].Value);
        Response.Redirect("Resultado.aspx?id=" + Codigo);
        //Aqui vc faz o que precisar, no caso eu estou mandando para outra página, peguei o ID através do DataKeys
    }


 <asp:GridView ID="gvwPalavroes" runat="server" DataKeyNames="ID"  OnRowDataBound="gvwPalavroes_RowDataBound"Width="680px"  AutoGenerateColumns="False" OnRowEditing="gvwPalavroes_RowEditing">
       <Columns>          
           <asp:BoundField DataField="Palavrao" HeaderText="Palavr&#227;o" SortExpression="Palavrao" />
            <asp:CommandField ButtonType="Image" SelectImageUrl="~/Images/Edit.gif" SelectText="Editar palavr&#227;o" ShowSelectButton="True">
            <ItemStyle HorizontalAlign="Center" Width="20px" />
         </asp:CommandField>
         <asp:CommandField ButtonType="Image" DeleteImageUrl="~/Images/Delete.gif" DeleteText="Excluir palavr&#227;o" ShowDeleteButton="True">
            <ItemStyle HorizontalAlign="Center" Width="20px" />
         </asp:CommandField>
       </Columns>
    </asp:GridView>
    </ContentTemplate>
  
   </asp:UpdatePanel>  
   
</asp:Content>


Aviso, a "maozinha' não funciona no FireFox.


Espero ter ajudado.

Fabio

GOSTEI 0
Fabricio Santos

Fabricio Santos

23/04/2009

Boa Tarde,   a mudança do ponteiro para mãosinha e o realce da cor das celulas esta funcionando bem, so que quando clico na linha me é apresentada o seguinte erro java script:   Detalhes dos erros da página da Web Agente de Usuário: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)
Carimbo de data/hora: Fri, 24 Apr 2009 16:34:09 UTC
Mensagem: Sys.WebForms.PageRequestManagerServerErrorException: Argumento de postback ou de retorno de chamada inválido. A validação do evento é habilitada com o uso de <pages enableEventValidation="true"/> na configuração ou <%@ Page EnableEventValidation="true" %> em uma página. Por motivos de segurança, esse recurso verifica se os argumentos para eventos de postback ou de retorno de chamada se originam no controle do servidor que originalmente os processou. Se os dados forem válidos e esperados, use o método ClientScriptManager.RegisterForEventValidation para registrar os dados de postback ou de retorno de chamada para validação.
Linha: 4723
Caractere: 21
Código: 0
URI: http://localhost/SICFin/ScriptResource.axd?d=AOmJwr7qRVSk-jUOFVwQycOjBRI53Dxi1N9GBaXbLbUljMTeI1T5w-nUY7iNeQSPeG27Ak2cCqs_ER61yx2bZT3vbpjX1TqZAuKL7XkNBFc1&t=ffffffffc30b8fab   Ja alterei a diretiva page da minha pagina ela esta da seguinte maneira: <%@ Page Title="" Language="C#" MasterPageFile="~/SICFin.master" AutoEventWireup="true" CodeFile="Cadastros.aspx.cs" Inherits="Cadastros_Cadastros" Culture="pt-BR" uiCulture="pt-BR" EnableEventValidation="true" %> Outro detalhe é que estou usando Ajax.   Grato,   Fabrício
GOSTEI 0
Fabio Mans

Fabio Mans

23/04/2009

Tira o Ajax que funciona.
GOSTEI 0
Fabricio Santos

Fabricio Santos

23/04/2009

cara, conegui fazer funcionar com o Ajax, alterei alterei a propriedade EnableEventValidation para false e na sessão pages do web.config ficou assim: <pages enableEventValidation="false" renderAllHiddenFieldsAtTopOfForm="false"> <controls> <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </controls> </pages>   Porem, quando clico na linha nao esta disparando o evendo que preparei e sim abrindo para edicao na propria linha do GridView. No meu programa a edicao nao e na linha do gridview e sim num panel que coloco como visivel.
GOSTEI 0
Fabio Mans

Fabio Mans

23/04/2009

Posta o seu Grid e o código fonte.
GOSTEI 0
Fabricio Santos

Fabricio Santos

23/04/2009

<asp:GridView ID="grdClientes" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#DEDFDE" BorderStyle="None" BorderWidth="1px" CellPadding="4" DataKeyNames="Id" DataSourceID="LinqClientesComplemento" ForeColor="Black" GridLines="Vertical" onselectedindexchanged="grdClientes_SelectedIndexChanged" OnRowDataBound="gvSetor_RowDataBound" OnRowEditing="grdClientes_RowEditing"> <RowStyle BackColor="#F5F2E9" /> <Columns> <asp:CommandField ShowSelectButton="True" /> <asp:BoundField DataField="DataValidade" HeaderText="DataValidade" SortExpression="DataValidade" /> <asp:BoundField DataField="VlrHoraAnalista" HeaderText="VlrHoraAnalista" SortExpression="VlrHoraAnalista" /> <asp:BoundField DataField="VlrHoraCliente" HeaderText="VlrHoraCliente" SortExpression="VlrHoraCliente" /> <asp:BoundField DataField="Km" HeaderText="Km" SortExpression="Km" /> </Columns> <FooterStyle BackColor="#CCCC99" /> <PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" /> <SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" /> <HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" /> <AlternatingRowStyle BackColor="White" /> </asp:GridView> protected void lbxClientes_SelectedIndexChanged(object sender, EventArgs e) { pnlClientes.Visible = false; grdClientes.DataBind(); pnlOpcoes.Visible = false; pnlNovoProduto.Visible = false; pnlClientes.Visible = true; } protected void btnClientes_Click(object sender, EventArgs e) { pnlOpcoes.Visible = false; pnlClientes.Visible = true; pnlNovoCliente.Visible = false; pnlNovoClienteComplemento.Visible = false; } protected void btnClienteVoltar_Click(object sender, EventArgs e) { pnlOpcoes.Visible = true; pnlClientes.Visible = false; } protected void btnNovoCliente_Click(object sender, EventArgs e) { btnSalvaCliente.Text = "Insere"; txtNomeCliente.Text = ""; pnlOpcoes.Visible = false; pnlNovoCliente.Visible = true; pnlClientes.Visible = true; grdClientes.Visible = false; } protected void btnCancelaCliente_Click(object sender, EventArgs e) { pnlOpcoes.Visible = false; pnlNovoCliente.Visible = false; pnlClientes.Visible = true; grdClientes.Visible = true; } protected void grdClientes_SelectedIndexChanged(object sender, EventArgs e) { btnSalvaCCliente.Text = "Salva"; DataClassesDataContext dc = new DataClassesDataContext(); var complemento = (from c in dc.ClientesComplementos where c.Id.Equals(int.Parse(grdClientes.SelectedDataKey.Value.ToString())) select c).Single(); txtValidadeCliente.Text = complemento.DataValidade.ToString(); txtValorCliCliente.Text = complemento.VlrHoraCliente.ToString(); txtVlrCliAnalista.Text = complemento.VlrHoraAnalista.ToString(); txtCliKm.Text = complemento.Km.ToString(); pnlOpcoes.Visible = false; pnlClientes.Visible = true; pnlNovoClienteComplemento.Visible = true; btnExluiCCliente.Visible = true; } protected void btnSalvaCliente_Click(object sender, EventArgs e) { DataClassesDataContext dc = new DataClassesDataContext(); int id = 0; if (id > 0) { var cliente = (from c in dc.Clientes where c.Id.Equals(id) select c).Single(); cliente.Nome = txtNomeCliente.Text; dc.SubmitChanges(); } else { Cliente cliente = new Cliente(); cliente.Nome = txtNomeCliente.Text; cliente.Usuario = Session["__cUserName"].ToString(); dc.Clientes.InsertOnSubmit(cliente); dc.SubmitChanges(); ClientesComplemento complemento = new ClientesComplemento(); complemento.IdCliente = cliente.Id; complemento.VlrHoraAnalista = 0; complemento.VlrHoraCliente = 0; complemento.Km = 0; dc.ClientesComplementos.InsertOnSubmit(complemento); dc.SubmitChanges(); } pnlClientes.Visible = false; pnlOpcoes.Visible = true; grdClientes.DataBind(); grdClientes.Visible = true; lbxClientes.DataBind(); pnlOpcoes.Visible = false; pnlNovoCliente.Visible = false; pnlClientes.Visible = true; } protected void btnExluicliente_Click(object sender, EventArgs e) { DataClassesDataContext dc = new DataClassesDataContext(); int id = int.Parse(lbxClientes.SelectedValue.ToString()); var complemento = from c in dc.ClientesComplementos where c.IdCliente.Equals(id) select c; dc.ClientesComplementos.DeleteAllOnSubmit(complemento); var cliente = (from c in dc.Clientes where c.Id.Equals(id) select c).Single(); dc.Clientes.DeleteOnSubmit(cliente); try { dc.SubmitChanges(); } catch { dc.Transaction.Rollback(); } finally { lbxClientes.DataBind(); grdClientes.DataBind(); pnlClientes.Visible = true; } } protected void btnNovoCCliente_Click(object sender, EventArgs e) { btnSalvaCCliente.Text = "Insere"; txtValidadeCliente.Text = ""; txtValorCliCliente.Text = ""; txtVlrCliAnalista.Text = ""; txtCliKm.Text = ""; pnlOpcoes.Visible = false; pnlNovoClienteComplemento.Visible = true; pnlClientes.Visible = true; grdClientes.Visible = false; } protected void btnSalvaCCliente_Click(object sender, EventArgs e) { DataClassesDataContext dc = new DataClassesDataContext(); int id = 0; if (btnSalvaCCliente.Text == "Salva") id = int.Parse(grdClientes.SelectedDataKey.Value.ToString()); if (id > 0) { var complemento = (from c in dc.ClientesComplementos where c.Id.Equals(id) select c).Single(); complemento.VlrHoraAnalista = decimal.Parse(txtVlrCliAnalista.Text); complemento.VlrHoraCliente = decimal.Parse(txtValorCliCliente.Text); complemento.Km = decimal.Parse(txtCliKm.Text); if (txtValidadeCliente.Text.Length > 0) complemento.DataValidade = DateTime.ParseExact(txtValidadeCliente.Text, "dd/MM/yyyy", null); dc.SubmitChanges(); } else { ClientesComplemento complemento = new ClientesComplemento(); complemento.IdCliente = int.Parse(lbxClientes.SelectedValue.ToString()); complemento.VlrHoraAnalista = decimal.Parse(txtVlrCliAnalista.Text); complemento.VlrHoraCliente = decimal.Parse(txtValorCliCliente.Text); complemento.Km = decimal.Parse(txtCliKm.Text); if (txtValidadeCliente.Text.Length > 0) complemento.DataValidade = DateTime.ParseExact(txtValidadeCliente.Text, "dd/MM/yyyy", null); dc.ClientesComplementos.InsertOnSubmit(complemento); dc.SubmitChanges(); } pnlNovoClienteComplemento.Visible = false; grdClientes.DataBind(); grdClientes.Visible = true; pnlOpcoes.Visible = false; pnlNovoClienteComplemento.Visible = false; pnlClientes.Visible = true; } protected void btnExluiCCliente_Click(object sender, EventArgs e) { DataClassesDataContext dc = new DataClassesDataContext(); int id = int.Parse(grdClientes.SelectedDataKey.Value.ToString()); var complemento = (from c in dc.ClientesComplementos where c.Id.Equals(id) select c).Single(); dc.ClientesComplementos.DeleteOnSubmit(complemento); dc.SubmitChanges(); pnlNovoClienteComplemento.Visible = false; grdClientes.DataBind(); pnlOpcoes.Visible = false; pnlNovoClienteComplemento.Visible = false; pnlClientes.Visible = true; } protected void btnCancelaCCliente_Click(object sender, EventArgs e) { pnlOpcoes.Visible = false; pnlNovoClienteComplemento.Visible = false; pnlClientes.Visible = true; grdClientes.Visible = true; } protected void gvSetor_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.DataItemIndex != -1) { e.Row.Attributes.Add("onclick", ClientScript.GetPostBackEventReference(grdClientes, "Edit$" + e.Row.RowIndex)); e.Row.Attributes.Add("onMouseover", "this.style.background='#FCF3C4';this.style.cursor='hand'"); //Verifica se a linha alternada e aplica o estilo if (e.Row.RowState == DataControlRowState.Alternate) { e.Row.Attributes.Add("onMouseout", "this.style.background='#FFFFFF';this.style.cursor='hand'"); } else { e.Row.Attributes.Add("onMouseout", "this.style.background='#F5F2E9';this.style.cursor='hand'"); } } } protected void grdClientes_RowEditing(object sender, GridViewEditEventArgs e) { int Codigo = Convert.ToInt32(grdClientes.DataKeys[e.NewEditIndex].Value); pnlClientes.Visible = false; grdClientes.DataBind(); pnlOpcoes.Visible = false; pnlNovoProduto.Visible = false; pnlClientes.Visible = true; }
GOSTEI 0
Fabio Mans

Fabio Mans

23/04/2009

Manda um print da tela, no seu grid não tem Edit, estranho.


GOSTEI 0
Fabricio Santos

Fabricio Santos

23/04/2009

Essa é antes de clicar em nada     essa e quando clico em algum lugar da linha e o que esta errado   essa e o que quero que acnteca quando eu clicar na linha. Hore esta ocorrendo so quando clico em Selecionar.
GOSTEI 0
Fabio Mans

Fabio Mans

23/04/2009

Não achei o erro, tente refazer com os exemplos que te passei, o conceito você já tem. 
GOSTEI 0
Fabricio Santos

Fabricio Santos

23/04/2009

Boa noite Fabio,   consegui resolver deixando o evento RowDatabound da seguinte maneira:   protected void gvSetor_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.DataItemIndex != -1) { LinkButton lnk = (LinkButton)e.Row.Cells[0].Controls[0]; e.Row.Attributes.Add("onClick", Page.GetPostBackEventReference(lnk, "")); e.Row.Attributes.Add("onMouseover", "this.style.background='#FCF3C4';this.style.cursor='hand'"); if (e.Row.RowIndex % 2 == 1) { e.Row.Attributes.Add("onMouseout", "this.style.background='#FFFFFF';this.style.cursor='hand'"); } else { e.Row.Attributes.Add("onMouseout", "this.style.background='Silver';this.style.cursor='hand'"); } } }     Pode encerrar o chamado.   Grato, Fabrício
GOSTEI 0
POSTAR