16/06/2012

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

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

Respostas

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 Citar

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 Citar

16/11/2012

Daniel Lima

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

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 Citar

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 Citar