imagebutton dentro de um grid view

16/02/2012

0

Boa tarde


Tenho um gridview que é carregado com dados de uma tabela no meu BD. No final de cada registro da grid é inserido uma imagebutton para permitir que o usuário possa alterar o registro.

Porém existe um determinado tipo de usuário que só tem permissão para consultar essas informações.

Para esses perfil de usuário quero que a image não apareça (visible=false).

Sei que usando o código (grvPrincipal.Columns[8].Visible = false;) eu resolvo essa situação.

Mas caso eu queira incluir ou retirar uma coluna do meu grid, vou precisar alterar o índice referente a coluna do imagebutton.

O que queria saber é se existe alguma forma de referenciar essa coluna, que não fosse usando índice. Por exemplo um id? Para evitar problemas com manuntenção de perfis.


Código do template dentro da gridview:
<asp:TemplateField>
<ItemStyle Width=15px HorizontalAlign=Center VerticalAlign=Top />
<ItemTemplate>
<asp:ImageButton ID=btnAlterar runat=server CommandName=btnAlterar ImageUrl=~/img/bot_pencil.png
CausesValidation=False EnableViewState=false ToolTip=Alterar></asp:ImageButton>
</ItemTemplate>
</asp:TemplateField>


Grato pela atenção
Paulo


Paulo Magalhães

Paulo Magalhães

Responder

Posts

16/02/2012

Joel Rodrigues

Bem, eu testei a seguinte solução e acredito que lhe sirva:

-----------
MyGridView.Columns.OfType<TemplateField>().Where(c => c.HeaderText==ALTERAR).First().Visible = false;
-----------

Considerando que o HeaderText da sua coluna é ALTERAR. Você pode definir outra propriedade e filtrar por ela, mas acho eu essa é a mais simples de manipular, pois a maioria das propriedades da coluna são de formatação de estilo. Então, você pode definir o HeaderText e deixar o Header invisível.

Acho que lhe serve, teste aí e diga o resultado.

Boa sorte.
Responder

17/02/2012

Paulo Magalhães

Bom dia Joel,

Valeu pela resposta, mas não entendi a solução.

Where(c => c.HeaderText==ALTERAR) ????

O que é o C?

Ahhhh.....Estou usando C#.


Grato, Paulo.


Bem, eu testei a seguinte solução e acredito que lhe sirva:

-----------
MyGridView.Columns.OfType<TemplateField>().Where(c => c.HeaderText==ALTERAR).First().Visible = false;
-----------

Considerando que o HeaderText da sua coluna é ALTERAR. Você pode definir outra propriedade e filtrar por ela, mas acho eu essa é a mais simples de manipular, pois a maioria das propriedades da coluna são de formatação de estilo. Então, você pode definir o HeaderText e deixar o Header invisível.

Acho que lhe serve, teste aí e diga o resultado.

Boa sorte.


Responder

17/02/2012

Joel Rodrigues

Nesse caso, utilizei um recurso do LINQ chamado Lambda Expressions, isso explica a sintaxe que utilizei no exemplo

Detalhando:

MyGridView. ---> meu objeto GridView
Columns. ---> a coleção de colunas do gridview, ou seja, uma coleção de DataControlField
OfType<TemplateField>(). ---> retorna uma lista (lista na qual pode-se aplicar uma consulta linq) somente com as cujo tipo seja TemplateField
Where(c => c.HeaderText==ALTERAR). ---> aqui, C passa a ser um objeto genérico que representa cada coluna da lista e eu filtro somente as colunas cujo HeaderTExt seja ALTERAR
First(). ---> me retorna o primeiro item da lista, por exemplo, poderia haver mais de uma coluna com essas características. Aqui eu poderia usar o método Take(1);
Visible = false; ---> a propriedade Visible do objeto retornado pela consulta passa a ser false;


Dê uma olhada no linke:
http://msdn.microsoft.com/pt-br/library/bb397687.aspx

Bem, falei realmente o básico somente para explicar a expressão, caso tenha dúvidas, fique à vontade para questionar.

Boa sorte.
Responder

17/02/2012

Joel Rodrigues

Leia-se:

OfType<TemplateField>(). ---> retorna uma lista (lista na qual pode-se aplicar uma consulta linq) somente com as *COLUNAS* cujo tipo seja TemplateField

e *LINK*.
Responder

23/02/2012

Paulo Magalhães

Olá Joel.....

Encontrei outra solução.

No templatefield coloquei um método que retorna true ou false na propriedade visible:

<asp:TemplateField>
<ItemStyle Width=15px HorizontalAlign=Center VerticalAlign=Top />
<ItemTemplate>
<asp:ImageButton ID=btnAlterar runat=server CommandName=btnAlterar ImageUrl=~/img/bot_pencil.png
CausesValidation=False EnableViewState=false ToolTip=Alterar Visible=<%# VerificaPerfil() %>></asp:ImageButton>
</ItemTemplate>


E nesse método eu verifico o perfil di usuario logado.


Vlw pela atenção.
Paulo.
Responder

23/02/2012

Joel Rodrigues

Beleza, eu tinha pensado nisso também, foi falha minha não ter sugerido antes.
Mas que bom que você chegou a uma solução.
Boa sorte.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar