Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

hebinhopassamani

Gridview - Executar Bind de um método com parâmetro

Recommended Posts

Pessoal,

 

Como faço pra dar um bind em um campo (BounField ou templateField com um label) a partir de um método que tenha um parametro.

Eu preciso que todas as minhas colunas do grid chamem o mesmo método de bind, modificando apenas o parametro do método.

 

Por exemplo(USANDO TEMPLATEFIELD)

 

dado o grid abaixo:

<asp:GridView ID="GridView1" runat="server">
               <Columns>
                   <asp:TemplateField>
                       <ItemTemplate>
                           <asp:Label ID="lblCodigo" runat="server" Text='<%# Bind("getAtributo") %>'></asp:Label>
                       </ItemTemplate>
                   </asp:TemplateField>
                   <asp:TemplateField>
                       <ItemTemplate>
                           <asp:Label ID="lblNome" runat="server" Text='<%# Bind("getAtributo") %>'></asp:Label>
                       </ItemTemplate>
                   </asp:TemplateField>
               </Columns>
</asp:GridView>

 

reparem que ele tem duas colunas e as duas chamam o mesmo metodo para preencher o text do label, esse metodo, getAtributo possui um parametro onde eu informo o nome do atributo, com isso eu percorro a lista de attributo do objeto e trago o valor do atributo pelo seu nome. ou seja se eu conseguir passar os parametros "Codigo" e "Nome" para esses dois Binds acima tudo irá funcionar.

 

como faço isso?

 

muito obrigado desde já.

 

Antonio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça assim, crie um metodo em seu codeBehinh que recebe um objeto e retorna uma string

public string GetAtributo(object i){
//sua interação
return resultado;
}

 

E no seu grid

<asp:Label ID="lblNome" runat="server" Text='<%# GetAtributo(Eval("suaColuna")) %>'></asp:Label>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ivan, desde já agradeço pela ajuda, mas veja bem.

 

quem possui esse metodo GetAttributo é cada objecto que está sendo passado como source para o grid. e não a pagina onde o grid está.

 

Deixa eu ver se explico melhor:

 

Eu tenho uma classe chamada MPSobject. essa classe não tem nenhum nenhum atributo, ela apenas tem um property que é um hashTable esse property se chama attributes

 

public class MPSObject

private _attributes as hashtable

 

public property attributes() as hashtable

get

return _attributes

end get

set (value as hastable)

_attributes = value

end set

end property

 

public function getAttributo(name as string) as string

return _attributes(name)

end function

End Class

 

quando eu carrego uma lista de objetos dessa classe eu preencho _attributes com o nome do atributo como key e o valor do atributo como value, ou seja, eu busco no banco de dados uma lista de MPSObject e eles vêm perfeitamente prenchido com seus atributos nesse hashtable eu faço isso pois meus atributos são dinamicos e dependendo do type de MPSobject ele terá atributos diferentes.

 

 

o que preciso fazer é passar essa lista de MPSobject para o grid e definir no html do grid quais attributos, que estão no hash do object, serão mapeados. então preciso que o grid chame o metodo getAttributo dos objetos passados para ele como source, só que para eu saber qual attributo eu estou mapeando eu preciso informar o nome (que é key do hashtable) como parametro assim o metodo getAttributo de um MPSObject ira me retornar o valor(value do hashtable) do atributo em questao.

 

alem disso quando fiz dessa forma que você me disse, deu erro de compilação dizendo que MPSobject não possui o property "name" (que é um dos attributos por exemplo) e ele não tem mesmo, como disse acima MPSobject nao tem nenhum property, esse atributo name está no hashtable.

 

obrigado pela atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, pela logica para MPSobjetc ter suas property preenchidas ela precisa ser iniciada. Sem iniciá-la suas property sempre serão nulas.

Eu acho que você deseja algo assim: Uma classe que tem uma subclasse relacionada, mas a subclasse tem que ter uma property relacionada a classe pai. ou você pode usar Herança.

Ou então fazer como eu disse. que é criar um metodo que retorna um texto. exemplo:

Tenho uma lista que preenche um Grid, e para cada item do grid preciso de por exemplo uma lista de outas informações.

Então usar GridView Aninhados

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ivan,

 

dado sua ideia inicial:

 

<asp:Label ID="lblNome" runat="server" Text='<%# GetAtributo(Eval("suaColuna")) %>'></asp:Label>

 

 

eu preciso que esse metodo GetAttributo, esteja nos objetos que são passados para o grid e não no codeBehinh da pagina em questao, tem como?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Impossível chamar um método que esteja dentro do objeto que populou o grid, e passar parâmetro é mais impossível ainda.

O que dá pra fazer é o que ceitei antes, chamar um método que esteja no code behing da página, ai você pode passar o parametro da linha do Grid.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.