GridView.DataSource com campo referenciado - trocar o seu ID pelo nome

16/06/2012

0

Primeiramente é o meu primeiro post no fórum, então me desculpem se eu errar em alguma coisa por aqui, nem sei se postei na Sala correta, mas vamos lá:

Aqui chamo uma dropdownlist com categorias e uma gridview com todos os produtos.

Na gridview me retornam todos os produtos, mas no campo Produto_Categoria, ele me traz o ID da Categoria, já que na tabela produto ele referencia ao ID da tabela Categoria.

if (!IsPostBack)
{
ddlCategorias.DataTextField = Categoria_Nome;
ddlCategorias.DataValueField = Categoria_ID;
DataTable dt = cdb.GetAllCategorias();
ddlCategorias.DataSource = dt;
ddlCategorias.DataBind();

gridProduto.DataSource = pdb.GetAllProdutos(usuario.ID);
gridProduto.DataBind();
}

Gostaria que no campo da categoria me viesse seu nome e não o ID, há alguma maneira de trazer direto o nome para a gridview?

Ou fazer uma conversão via código mesmo?

OBS: Uso C#

Desde já agradeço!
André Moes

André Moes

Responder

Posts

16/06/2012

Fabio Rosa

Olá André,

Para ficar mais claro, o seu GridView está gerando colunas automaticamente? (Propriedade AutoGenerateColumns=True no formulário).

Caso não, basta você retirar a coluna que não deseja no source do gridview.
Caso sim, que acho que é o seu caso... Talvez seria interessante você alterar para não criar as colunas automaticamente....Desta forma você pode especificar somente as colunas que deseja no gridview... por exemplo

<asp:DataGrid ID=DefaultGrid Runat=server AutoGenerateColumns=False>
    <Columns>
        <asp:BoundColumn DataField=Index ReadOnly=True HeaderText=#>
        </asp:BoundColumn>        
        <asp:BoundColumn DataField=Description
            ReadOnly=True HeaderText=Description>
        </asp:BoundColumn>
    </Columns>
</asp:DataGrid>



Verifique este link também, para esclarecer mais sobre esta propriedade:
http://msdn.microsoft.com/pt-br/library/system.web.ui.webcontrols.gridview.autogeneratecolumns.aspx

Abraço.
Responder

17/06/2012

André Moes

Olá André,

Para ficar mais claro, o seu GridView está gerando colunas automaticamente? (Propriedade AutoGenerateColumns=True no formulário).

Caso não, basta você retirar a coluna que não deseja no source do gridview.
Caso sim, que acho que é o seu caso... Talvez seria interessante você alterar para não criar as colunas automaticamente....Desta forma você pode especificar somente as colunas que deseja no gridview... por exemplo

<asp:DataGrid ID=DefaultGrid Runat=server AutoGenerateColumns=False>
    <Columns>
        <asp:BoundColumn DataField=Index ReadOnly=True HeaderText=#>
        </asp:BoundColumn>        
        <asp:BoundColumn DataField=Description
            ReadOnly=True HeaderText=Description>
        </asp:BoundColumn>
    </Columns>
</asp:DataGrid>



Verifique este link também, para esclarecer mais sobre esta propriedade:
http://msdn.microsoft.com/pt-br/library/system.web.ui.webcontrols.gridview.autogeneratecolumns.aspx

Abraço.


Estou especificando a coluna sim, o caso é que uma delas se chama categoria e no banco de dados está referenciada a tabela categoria, ou seja, na tabela do produto ele tem apenas o código da categoria, e eu queria que ele mostrasse o nome na gridview quando ele me retorna do banco de dados, sei que há uma maneira, mas não sei como rsrs
Responder

16/11/2012

Daniel Lima

Andre você conseguiu resolver o seu problema? Estou com a mesma situação.
Responder

19/11/2012

André Moes

Andre você conseguiu resolver o seu problema? Estou com a mesma situação.


Consegui sim!
Mas não tenho o código no momento...

A solução não é em código c# e sim pelo SQL

Procure dar uma olhada em InnerJoin, ele é uma função no SQL que "junta" dados de uma tabela em outra!
Podendo assim pegar dados de duas tabelas!

Vou ver se hoje a noite encontro o código em casa para postar!
Responder

07/12/2012

André Moes

Andre você conseguiu resolver o seu problema? Estou com a mesma situação.


SELECT P.SIGLA, P.PAIS, A.SIGLAAEROPORTO, A.NOME, A.EXTENSAO, A.ELEVACAO, A.GMT, A.LATITUDENORTESUL, A.LATITUDEGRAUS, A.LATITUDEMINUTO, A.LATITUDESEGUNDO, A.LONGITUDELESTEOESTE, A.LONGITUDEGRAUS, A.LONGITUDEMINUTO, A.LONGITUDESEGUNDO
FROM AEROPORTOS AS A INNER JOIN PAISES AS P ON (A.PAIS = P.CODIGO) WHERE P.SIGLA LIKE '%@SIGLAPAIS%'

comando.Parameters.AddWithValue("@SIGLAPAIS", filtro.SiglaPais);

Aqui está a solução!

Essa parte define o Inner Join, relacionando o código no Aeroportos.Pais com o Paises.Pais
< AEROPORTOS AS A INNER JOIN PAISES AS P ON (A.PAIS = P.CODIGO) >

além de criar um "apelido" para Aeroportos == A e Paises == P

Esse é um relacionamento apenas para trazer do banco de dados em uma única tabela o coteúdo de duas, sendo que uma referência a outra!
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar