Array
(
)

Exibir property na GridView

Gustavo Marcon
   - 21 set 2010

Boa tarde,

Estou com a seguinte dúvida. Tenho um objeto Banco, que possui os atributos e propriedades para idBanco e NomeBanco. Tenho um objeto ContaBancaria, que possui um atributo do tipo Banco.   No form tenho uma gridview onde quero listar as contas bancárias cadastradas, e numa das colunas quero mostrar o nome do banco, que não é uma propriedade de ContaBancaria, mas sim de Banco, que por sua vez é uma propriedade de ContaBancaria.   Adicionei um bindingsource, e vinculei o ObjectDataSource dele com a classe ContaBancaria. Na hora de configurar as colunas ele encherga o atributo do tipo Banco, mas os atributos da classe Banco, como Nome do Banco, não aparecem disponíveis. Como faço para mostrar na grid esta informação?     Obrigado !

Vinicius Vieira
   - 22 set 2010

Parceiro,Quer um conselho?Faz um select dando um join nas duas tabelas e trazendo somente os campos que precisa nele e alimenta um datatable ai você joga no binding source.Pra mim seria o jeito mais fácil, pode ser que outras pessoas tenham outras sugestões.Espero ter ajudado.

Gustavo Marcon
   - 22 set 2010

Pois é, dessa forma que eu venho fazendo, mas fiquei encucado. Pensei, se os objetos tem atributos do tipo de outros objetos, seria interessante poder usar eles para apresentar as informações também, por isso imagino que deve ter alguma forma.   Bom, enquanto não encontro como fazer, vou continuar fazendo com DataTable mesmo. Valeu !

Marcus Meirelles
   - 22 out 2010

Estava com esse mesmo problema e resolvi da seguinte maneira, edita as colunas do seu gridview, e converte seu field em template, depois vai em edit template, e no item de template vai em edit databindings, ai vai na opção text e coloca no campo custom bindings a expressão:  Bind("Objetofilho.atributo")  e vai funcionar.   Abraços   Marcus

Netasper
   - 25 out 2010

Gustavo,

Também ja me deparei com este tipo de problema, para resolver, criei uma classe, que agora sem uso um meus projetos, segue a solução:

namespace CustomControls
{
    public class CompositeBoundField : BoundField
    {
        protected override object GetValue(Control controlContainer)
        {
            object item = DataBinder.GetDataItem(controlContainer);
            return DataBinder.Eval(item, this.DataField);
        }
    }
}

E no grid view:

        <asp:GridView ID="gvRegistros" runat="server" AutoGenerateColumns="False" OnRowDataBound="gvRegistros_RowDataBound"
            OnPageIndexChanging="gvRegistros_PageIndexChanging">
            <Columns>
                <cc:CompositeBoundField DataField="Categoria.NomCategoria" HeaderText="Categoria" />

E no web.config:
    <pages theme="Admin">
      <controls>
       
        <!-- DICA PARA EVAL NOS GRIDVIEWS -->
        <add assembly="INTERFACE" namespace="CustomControls" tagPrefix="cc"/>
       
                <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            </controls>
        </pages>