imagebutton dentro de um grid view
16/02/2012
0
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
Posts
16/02/2012
Joel Rodrigues
-----------
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.
17/02/2012
Paulo Magalhães
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.
-----------
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.
17/02/2012
Joel Rodrigues
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.
17/02/2012
Joel Rodrigues
OfType<TemplateField>(). ---> retorna uma lista (lista na qual pode-se aplicar uma consulta linq) somente com as *COLUNAS* cujo tipo seja TemplateField
e *LINK*.
23/02/2012
Paulo Magalhães
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.
23/02/2012
Joel Rodrigues
Mas que bom que você chegou a uma solução.
Boa sorte.
Clique aqui para fazer login e interagir na Comunidade :)