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!
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
Curtidas 0
Respostas
Fabio Rosa
16/06/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
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.
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.
GOSTEI 0
André Moes
16/06/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
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.
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
GOSTEI 0
Daniel Lima
16/06/2012
Andre você conseguiu resolver o seu problema? Estou com a mesma situação.
GOSTEI 0
André Moes
16/06/2012
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!
GOSTEI 0
André Moes
16/06/2012
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!
GOSTEI 0