Usuário com melhor resposta
Alterar o nome de uma CommandField no grid view

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
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
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
-
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
-
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
-
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