Array
(
)

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

André Moes
   - 16 jun 2012

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!

Fabio Rosa
   - 16 jun 2012

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

#Código
<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.

André Moes
   - 17 jun 2012


Citação:
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

#Código
<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

Daniel Lima
   - 16 nov 2012

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

André Moes
   - 19 nov 2012


Citação:
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!

André Moes
   - 07 dez 2012


Citação:
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!