none
Alterar o nome de uma CommandField no grid view RRS feed

  • Pergunta

  • Tem como eu mudar o nome do CommandField ?

    Eu tenho uma grid, que dependendo da situação do cadastro, ele deve aparecer um nome diferente.

    Bem acho que um exemplo é melhor:

          |Nome | Endereco | Status do Cadastro

    ok  |carlos|rua marian| Completo

    Edit|Maria|                  | Incompleto

    No caso dos que estivessem com o campo OK, eu apenas mostra os dados abaixo e não permite consulta, e no caso do Edit, automaticamente abre a tela de consulta.

    Eu não queria ter quer criar duas colunas, uma com essas informações e outra para poder fazer a seleção.

    Será que tem como fazer isso, eu tenho como mudar o texto do CommandField de acordo com o status do usuário?

    Sendo que na minha aplicação tem outros status (mas uns 4) mas espero que o exemplo mostre melhor o que eu quero

    Grata :D


    Visitem os meus blogs: http://planetabrasileiro.blogspot.com http://programacaoegames.blogspot.com Rebeca bjs

    segunda-feira, 14 de maio de 2012 16:26

Respostas

  • Fácil! 
    Imagine que na "coluna 1" da GridView será exibido um campo que contém o valor que será verificado, esse valor poderá ser o texto "1" ou "2".

    Se for o valor/string "1" significa que está OK, então será exibida uma lengenda de texto (Label) "OK".
    Se for o valor/string "2" significa que possui algum tipo de pendencia, por isso deverá ser redirecionado para uma página que exibirá a descrição da pendencia e as ações necessárias para que ela seja resolvida (regras de negócio), neste caso será criado um HyperLink que terá como função o redirecionamento para a página com o nome "pendencia.aspx".

    Ok, até aqui temos uma situação! Agora vamos codificar!

    protected void grid_RowDataBound(object sender, GridViewRowEventArgs e){
      if (e.Row.RowType == DataControlRowType.DataRow) {
    
        // O Valor da coluna 1 será uma string com os valores "1" ou "2" 
        string valor = e.Row.Cells[1].Text; //aqui pegamos o valor da Coluna 1, do registro/linha corrente!
    
        // Se o valor for 1, indica que apenas aparecerá o texto OK
        // por isso criaremos um Label que exibirá um texto apenas
        if (valor.Equals("1")) {
          Label situacao = new Label();
          situacao.Text = "OK";
        }
    
        // Se o valor for 2, aparecerá um HyperLink que levará a 
        // página desejada, neste caso a "pendencia.aspx"!
        if (valor.Equals("2")) {
          HyperLink situacao = new HyperLink();
          situacao.NavigateUrl = "~/pendencia.aspx";
          situacao.Text = "Corrigir Pendencia";
        }
    
        //  Veja que eu utilizei o nome "situacao" para os objetos criados.
        //  Tanto o Label quando o HyperLynk, porque o método abaixo (Add) adiciona 
        //um objeto System.Web.UI.Control, e tanto o Label quanto o HyperLynk herdam 
        //das classes WebControl que por sua vez herda da Control.
    
        //  Adiciona no lugar do valor o texto "OK" (Label) ou o o link (HyperLink)!
        e.Row.Cells[1].Controls.Add(situacao); //assim não preciso fazer verificações, evito código desnecessário!
      }
    }

    Não sei se fui bem claro! 
    Mas se quiser postar aqui exatamente como é sua GridView, os campos exibidos e mais informações posso implementar esse modelo com os seus dados, assim poderá utiliza-lo!

    Para apenas mudar o nome do CommandField, faça semelhante o que fiz com o Label, mas com o objeto desejado, Button, ImageButton, etc...

    Espero ter ajudado!
    Abraço a todos.


    É ajudando os outros que nos ajudamos...


    • Editado Terra Jr quinta-feira, 17 de maio de 2012 03:17
    • Marcado como Resposta Harley Araujo sexta-feira, 18 de maio de 2012 14:06
    quinta-feira, 17 de maio de 2012 03:14

Todas as Respostas

  • Vc deve tratar isso no rowndatabound e lá vc faz o teste que vc, veja esse exemplo e adapte para o que vc quer

    void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
            { 
                if (e.Row.RowType != DataControlRowType.DataRow) return; 
     
                int idade; 
                if (int.TryParse(e.Row.Cells[1].Text, out idade)) 
                    if (idade == 30) 
                    { 
                        Button btnEdit = (Button) e.Row.FindControl("btnEdit"); 
                        btnEdit.Visible = false; 
                    } 
            } 
    


    Junior

    • Marcado como Resposta Harley Araujo quarta-feira, 16 de maio de 2012 10:24
    • Não Marcado como Resposta Bequi quarta-feira, 16 de maio de 2012 17:10
    segunda-feira, 14 de maio de 2012 17:42
  • Vc deve tratar isso no rowndatabound e lá vc faz o teste que vc, veja esse exemplo e adapte para o que vc quer

    void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
            { 
                if (e.Row.RowType != DataControlRowType.DataRow) return; 
     
                int idade; 
                if (int.TryParse(e.Row.Cells[1].Text, out idade)) 
                    if (idade == 30) 
                    { 
                        Button btnEdit = (Button) e.Row.FindControl("btnEdit"); 
                        btnEdit.Visible = false; 
                    } 
            } 
    


    Junior

    Não0 funcionou, não consigo alterar o command fild conforme um dado da linha.

    Essa função que vc passou não serviu.


    Visitem os meus blogs: http://planetabrasileiro.blogspot.com http://programacaoegames.blogspot.com Rebeca bjs

    quarta-feira, 16 de maio de 2012 17:12
  • faz essa alteração aqui

    If e.Row.RowType = DataControlRowType.DataRow Then                        'Alterando o TEXT do CommandButton                        Dim TXTSelect As String = DataBinder.Eval(e.Row.DataItem, "DESCSTATUS")                        Dim gvw As GridView                        Dim cf As Button 'é um CommandField mesmo, mas para dar certo tem que "jogar" como button                        gvw = TryCast(sender, GridView)                        cf = TryCast(e.Row.Controls(0).Controls(0), Button)                         If TXTSelect = "NOVA" Then                                cf.Text = "Concluir"                        ElseIf TXTSelect = "CANCELADA" Then                                cf.Text = "Cancelado"                        ElseIf TXTSelect = "ANDAMENTO" Then                                cf.Text = "Em andamento"                                cf.Enabled = False                        ElseIf TXTSelect = "CONCLUIDA" Then                                cf.Text = "Finalizada"                                cf.Enabled = False                        End If                End If


    Junior

    quarta-feira, 16 de maio de 2012 17:59
  • Fácil! 
    Imagine que na "coluna 1" da GridView será exibido um campo que contém o valor que será verificado, esse valor poderá ser o texto "1" ou "2".

    Se for o valor/string "1" significa que está OK, então será exibida uma lengenda de texto (Label) "OK".
    Se for o valor/string "2" significa que possui algum tipo de pendencia, por isso deverá ser redirecionado para uma página que exibirá a descrição da pendencia e as ações necessárias para que ela seja resolvida (regras de negócio), neste caso será criado um HyperLink que terá como função o redirecionamento para a página com o nome "pendencia.aspx".

    Ok, até aqui temos uma situação! Agora vamos codificar!

    protected void grid_RowDataBound(object sender, GridViewRowEventArgs e){
      if (e.Row.RowType == DataControlRowType.DataRow) {
    
        // O Valor da coluna 1 será uma string com os valores "1" ou "2" 
        string valor = e.Row.Cells[1].Text; //aqui pegamos o valor da Coluna 1, do registro/linha corrente!
    
        // Se o valor for 1, indica que apenas aparecerá o texto OK
        // por isso criaremos um Label que exibirá um texto apenas
        if (valor.Equals("1")) {
          Label situacao = new Label();
          situacao.Text = "OK";
        }
    
        // Se o valor for 2, aparecerá um HyperLink que levará a 
        // página desejada, neste caso a "pendencia.aspx"!
        if (valor.Equals("2")) {
          HyperLink situacao = new HyperLink();
          situacao.NavigateUrl = "~/pendencia.aspx";
          situacao.Text = "Corrigir Pendencia";
        }
    
        //  Veja que eu utilizei o nome "situacao" para os objetos criados.
        //  Tanto o Label quando o HyperLynk, porque o método abaixo (Add) adiciona 
        //um objeto System.Web.UI.Control, e tanto o Label quanto o HyperLynk herdam 
        //das classes WebControl que por sua vez herda da Control.
    
        //  Adiciona no lugar do valor o texto "OK" (Label) ou o o link (HyperLink)!
        e.Row.Cells[1].Controls.Add(situacao); //assim não preciso fazer verificações, evito código desnecessário!
      }
    }

    Não sei se fui bem claro! 
    Mas se quiser postar aqui exatamente como é sua GridView, os campos exibidos e mais informações posso implementar esse modelo com os seus dados, assim poderá utiliza-lo!

    Para apenas mudar o nome do CommandField, faça semelhante o que fiz com o Label, mas com o objeto desejado, Button, ImageButton, etc...

    Espero ter ajudado!
    Abraço a todos.


    É ajudando os outros que nos ajudamos...


    • Editado Terra Jr quinta-feira, 17 de maio de 2012 03:17
    • Marcado como Resposta Harley Araujo sexta-feira, 18 de maio de 2012 14:06
    quinta-feira, 17 de maio de 2012 03:14