none
Entidade com auto relacionamento mostrar no grid view RRS feed

  • Pergunta

  • Olá galera...

    tenho uma entidade com auto relacionamento da seguinte forma.

    public class Grupo
        {
            public int GrupoID { get; set; }
            public int? GrupoPaiID { get; set; }
            public string Nome { get; set; }
            public string Descricao { get; set; }
    
            public virtual Grupo GrupoPai { get; set; }
            public virtual ICollection<Grupo> Grupos { get; set; }
    
        }
    Property(g => g.GrupoPaiID).IsOptional(); // NAO OBRIGATORIO TER GRUPO PAI
    
                HasOptional(p => p.GrupoPai) // UM GRUPO PODE TER UM GRUPOPAI
                .WithMany(p => p.Grupos) // 1 GRUPOPAI PERTENCE A GRUPO
                .HasForeignKey(p => p.GrupoPaiID); // CHAVE ESTRANGEIRA DE GRUPOPAI
               

    a principio esta tudo certo..
    estou conseguindo cadastrar grupos.. assim como subgrupos.

    porém, não tenho nem ideia de como exibir esses grupos e subgrupos alinhados em um dataGridView.

    gostaria de exibir algo como:

    id    | nome do grupo
    01   | grupo de clientes
    02   | .... convenios
    03   | ........ convenio x
    04   | ........ convenio y
    05   | .... tipo
    06   | ........ consumidor final
    07   | ........ revenda
    08   | ........ comércio

    quem puder ajudar ou dar uma luz agradeço.
    boa madrugada a todos

    quinta-feira, 28 de julho de 2016 05:23

Respostas

  • finalmente consegui.
    custo, demorou.. mas saiu.




    basicamente o que tive que fazer é criar uma coluna no banco chamado nível
    a coluna nível recebe o valor do nivel do Grupo Pai + seu ID

    ao salvar um Grupo, apenas deve verificar se tem Grupos Filhos, se tiver atualiza o Nível deles também

    Ao carregar os dados no DataGridView... basta ordenar por Nível.
    e para ter o espaço na visualização do grid, basta apenas multiplicar quantidade de Pontos que tem na coluna nível X quant. de espaços desejados... (pode ser espaço, pontos, traço)

    Para carregar um ComboBox fica fácil também




    Tentei utilizar o TreeView, mas ele não possuí colunas.
    A consulta deveria ser diferente dos outros forms de Crud normal

    Assim, até a consulta fica melhor
    Posso pesquisar qualquer nível, sempre retorna o nível + os Filhos

    Espero que ajude alguém também
    Quem tiver sugestões.. agradeço
    • Marcado como Resposta DevMaicon sábado, 6 de agosto de 2016 00:11
    sábado, 6 de agosto de 2016 00:10

Todas as Respostas

  • estou utilizando Windows Forms, C#6
    quinta-feira, 28 de julho de 2016 11:59
  • Bom Dia,

    eu vou te mostrar com fiz com vendas e itens venda e acho que pode te ajudar de alguma forma:

    grid Vendas:

    using System;
    using System.Windows.Forms;
    using DevExpress.Data.Linq;
    using DevExpress.XtraEditors;
    
    namespace e_SistemCheff.Grids
    {
        public partial class frmGrid_Venda : XtraForm
        {public frmGrid_Venda()
            {
                InitializeComponent();
            }
    
            private void frmGrid_Venda_Load(object sender, EventArgs e)
            {
                
            }
    
            private void btnAtualiza_grid_Venda_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
            {
                Grid_Movimento.RefreshData();
            }
    
            private void btn_Localiza_Grid_Venda_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
            {
                string DataInicial = repositoryItemDateEdit1.GetDisplayText(Vendas_Data_Inicial.EditValue);
                string Datafinal = repositoryItemDateEdit2.GetDisplayText(Vendas_Data_Final.EditValue);
    
                if (string.IsNullOrEmpty(DataInicial))
                {
                    XtraMessageBox.Show("Favor preencher com a  data inicial","e_SistemCheff",MessageBoxButtons.OK);
                    return;
                }
                if (string.IsNullOrEmpty(Datafinal))
                {
                    XtraMessageBox.Show("Favor preencher com a  data Final", "e_SistemCheff", MessageBoxButtons.OK);
                    return;
                }
                else
                {
                    Grid_Movimento_Mesa.DataSource = uteis.ListarMesas(Convert.ToDateTime(Vendas_Data_Inicial.EditValue), Convert.ToDateTime(Vendas_Data_Final.EditValue));
                    Grid_Itens_Movimento.DataSource.GetAttachedProperty("IteMoviMesas");
                        
    
                    Grid_Movimento.BestFitColumns();
                }
    
            }
        }
    }

    a classe que faz a busca:

    using System;
    using System.Collections.Generic;
    using System.Data.Entity;
    using System.Linq;
    using System.Windows.Forms;
    using DevExpress.XtraPrinting.Native;
    using e_SistemCheff.Models;
    
    
    namespace e_SistemCheff
    {
        public class uteis
        {
            public static List<Cad_Estoque> ListarEstoques()
            {
    
                try
                {
                    using (var contexto = new Contexto())
                    {
                        return contexto.CadEstoques.ToList();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                    return null;
                }
            }
    
            public static List<Movi_Mesa> ListarMesas(DateTime DataInicial, DateTime DataFinal)
            {
                try
                {
                    using (var contexto = new Contexto())
                    {
                        var query = contexto.MoviMesas.Include(x => x.IteMoviMesas).Where(x => x.DTH_ABERTO >= DataInicial.Date && x.DTH_ENCERRADO <=DataFinal.Date)
                            .ToList();
                        return query;
    
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                    return null;
                }
            }
            public static List<Movi_Mesa> ListarItensMesas(DateTime DataInicial, DateTime DataFinal)
            {
                try
                {
                    using (var contexto = new Contexto())
                    {
                        var query = contexto.MoviMesas.Where(x => x.DTH_ABERTO >= DataInicial.Date && x.DTH_ENCERRADO <= DataFinal.Date)
                            .ToList();
                        return query;
    
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                    return null;
                }
            }
        }
    }
               

    veja se te ajudou de alguma forma. caso tenha duvida me fale  que vejo o que posso te ajudar

    quinta-feira, 28 de julho de 2016 12:17
  • mas voce estaria utilizando mais de um data grid view isso?

    pois minha intenção seria tudo no mesmo grid.

    Até porque será grupos e subgrupos com ilimitados níveis.. não podendo ser em outro grid

    quinta-feira, 28 de julho de 2016 12:50
  • no meu caso usei no mesmo grid os 2, eu criei um subgrid, quando clicava na venda mostrada os itens venda, mais e so vc mostrar em um grid so o seu com base neste ai
    quinta-feira, 28 de julho de 2016 13:20
  • Mas no seu caso é pedido  e itens
    No meu caso é pode ter Varios niveis.. um grupo pode estar dentro de outro..


    id    | nome do grupo
    01   | grupo de clientes
    02   | .... convenios
    03   | ........ convenio x
    04   | ........ convenio y
    05   | .... tipo
    06   | ........ consumidor final
    07   | ........ revenda
    08   | ........ comércio

    quinta-feira, 28 de julho de 2016 17:37
  • aqui não existe / nao mostra essa propriedade no data grid .DataSource
    .DataSource.GetAttachedProperty()

    quinta-feira, 28 de julho de 2016 17:45
  • Bom dia Michaeell,

    Você já tentou utilizar o DataGridViewCellStyle.Alignment Property  ?

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 29 de julho de 2016 12:39
    Moderador
  • mas essa propriedade seria apenas para fazer o alinhamento do texto na celula do grid não?

    o que preciso, é digamos acrescentar 3 pontos ... para cada nivel a dentro

    id | nome do grupo
    01 | grupo de clientes
    02 | .... Convenções
    03 | ........ Convenção x
    04 | ........ Convenção e
    05 | .... Tipo
    06 | ........ Consumidor final
    07 | ........ Revenda
    08 | ........ comércio

    sexta-feira, 29 de julho de 2016 13:45
  • finalmente consegui.
    custo, demorou.. mas saiu.




    basicamente o que tive que fazer é criar uma coluna no banco chamado nível
    a coluna nível recebe o valor do nivel do Grupo Pai + seu ID

    ao salvar um Grupo, apenas deve verificar se tem Grupos Filhos, se tiver atualiza o Nível deles também

    Ao carregar os dados no DataGridView... basta ordenar por Nível.
    e para ter o espaço na visualização do grid, basta apenas multiplicar quantidade de Pontos que tem na coluna nível X quant. de espaços desejados... (pode ser espaço, pontos, traço)

    Para carregar um ComboBox fica fácil também




    Tentei utilizar o TreeView, mas ele não possuí colunas.
    A consulta deveria ser diferente dos outros forms de Crud normal

    Assim, até a consulta fica melhor
    Posso pesquisar qualquer nível, sempre retorna o nível + os Filhos

    Espero que ajude alguém também
    Quem tiver sugestões.. agradeço
    • Marcado como Resposta DevMaicon sábado, 6 de agosto de 2016 00:11
    sábado, 6 de agosto de 2016 00:10