none
Problemas ao alimentar um DataGridView através de um DataTable C# RRS feed

  • Pergunta

  • Amigos, criei uma classe contendo métodos básicos que customizam um DataGridView. Porém, quando eu tento carregá-lo na inicialização do Form ou quando pesquiso algo, os registros não aparecem no DataGridView, mas aparecem as linhas em branco. Um DataTable está alimentando-o. Vejam o fonte abaixo:

    public void AtualizarDataGrid()
            {
                PaisBLL paisBLL = new PaisBLL();

                LimparDataGrid();
                dgPesquisar.DataSource = paisBLL.ConsultarPorNome(txbPesquisar.Text);
                dgPesquisar.DefinirTiposColunas(new List<String>() { "IDPais", "Nome", "CodigoCorreios", "Sigla2Carac", "Sigla3carac", "Sistema" }, new List<String>() { "textbox", "textbox", "textbox", "textbox", "textbox", "checkbox" });
                dgPesquisar.DefinirTitulosCabecalhos(new List<String>() { "Cód. País", "Nome", "Cód. Correios", "Sigla 2 carac.", "Sigla 3 carac.", "Sistema" });
                dgPesquisar.DefinirAlinhamentoCabecalhos(new List<String>() { "centro", "centro", "centro", "centro", "centro", "centro" });
                dgPesquisar.DefinirAlinhamentosColunas(new List<String>() { "centro", "esquerda", "centro", "centro", "centro", "centro" });
                dgPesquisar.DefinirLarguras(new List<int>() { 10, 47, 12, 12, 12, 7 });        

                dgPesquisar.Update();
                dgPesquisar.Refresh();

            }

    O que está faltando para essas linhas serem carregadas???



    segunda-feira, 13 de julho de 2015 22:44

Respostas

  • Jalber,

    ao que parece está faltando algo que defina quais são os nomes dos campos do seu banco de dados.

    Parece que está preenchendo porém como não encontra qual campo preencher ele preenche em branco.


    Att, Lucio Rogerio


    Espero ter ajudado, se ajudei, por favor "Vote como Útil", e se resolvi seu problema, clique em "Propor como Resposta".

    • Marcado como Resposta Jalber Romano terça-feira, 14 de julho de 2015 13:38
    terça-feira, 14 de julho de 2015 00:10

Todas as Respostas

  • Isso acontece quando você cria em tempo de projeto as colunas, basta remover as colunas em tempo de projeto ou não criar em tempo de execução que os dados aparecem

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    terça-feira, 14 de julho de 2015 02:02
  • Boa noite, você pode utilizar uma classe para representar o teu objeto. 

    public class Objeto 
    {
    	public string CodPais {get;set;}
    	public string Nome {get;set;}
    	public string CodCorreios {get;set;}
    }

    No editor de colunas do dataGrid, defina o nome da coluna da classe, e alimente a tua lista utilizando a classe criada, é bem simples e funciona perfeitamente, utilizo este padrão para obter dados do banco de dados e jogar em um dataGrid.


    Gilson Joanelo - Desenvolvedor Web

    terça-feira, 14 de julho de 2015 02:18
  • Obrigado por responder Lucio... Eu chequei os nomes e aparentemente estão certos, desde o carregamento do datatable... Acho que deve ser o que o GTS sugeriu logo abaixo...

    Se de repente vc tiver um tempo e puder dar uma olhada no fonte do projeto, talvez consiga identificar o problema:

    https://onedrive.live.com/?id=40838E65B9F8787E%21120&cid=40838E65B9F8787E&group=0

    terça-feira, 14 de julho de 2015 10:22
  • Obrigado por responder GTS.

    Eu sou iniciante e estou apanhando muito com customizar datagrids... confesso que é meu primeiro customizado.

    Caso desejar dar uma olhada no fonte, talvez consiga identificar mais rapidamente o problema:

    https://onedrive.live.com/?id=40838E65B9F8787E%21120&cid=40838E65B9F8787E&group=0

    Estou quase desistindo e configurando-o mesmo pelas properties.....

    terça-feira, 14 de julho de 2015 10:31
  • Olá Gilson... Obrigado por me ajudar.

    É interessante a sua sugestão de criar uma classe...O problema é que o projeto é em camadas e eu já tenho uma classe criada....é que lá no datatable, ele me retornará já objetos País ai não sei se deveria criar um nova classe País ou se dara para utilizar a existente.

    Como vc pode ver na imagem, o grid é carregado e as linhas apenas aparecem em branco... acho que falta pouco rsrsrs nossa é tenso quando se está aprendendolkkkkkkk


    terça-feira, 14 de julho de 2015 10:37
  • Pessoal, descobri o problema:

    No meu método de criação das colunas do DataGrid, eu não estava setando a propriedade DataPropertyName.

    Acidentalmente descobri isso kkkkkkk

    Neste caso, o colega Lucio Rogerio SP estava certo...

            public void DefinirTiposColunas(List<String> ListaTitulos, List<String> ListaTipos)
            {

                for (int ContListaTitulos = 0; ContListaTitulos < ListaTitulos.Count(); ContListaTitulos++)
                {
                    
                    if (ListaTipos[ContListaTitulos] == "checkbox")
                        {
                            DataGridViewCheckBoxColumn cb = new DataGridViewCheckBoxColumn();
                            cb.ValueType = typeof(bool);
                            cb.Name = ListaTitulos[ContListaTitulos];
                            cb.DataPropertyName = ListaTitulos[ContListaTitulos]; //acrescentei esta linha
                            cb.HeaderText = ListaTitulos[ContListaTitulos];
                            this.Columns.Add(cb);
                        }
                    if (ListaTipos[ContListaTitulos] == "textbox")
                        {
                            DataGridViewTextBoxColumn tb = new DataGridViewTextBoxColumn();
                            tb.ValueType = typeof(String);
                            tb.Name = ListaTitulos[ContListaTitulos];
                            tb.DataPropertyName = ListaTitulos[ContListaTitulos]; //acrescentei esta linha
                            tb.HeaderText = ListaTitulos[ContListaTitulos];
                            this.Columns.Add(tb);
                        }
                   
                }

    Agora preciso achar uma maneira de fazê-lo ficar mais rápido nas consultas, pois, quando se digita algo na caixa de pesquisas (evento textchanged) a imagem do grid fica piscando pois leva-se mais tempo para limpar, gerar as colunas do grid, formatar e recarregar....

    Obrigado pela força galerada!!!!!!

    Que Deus abençoe a todos!!


    terça-feira, 14 de julho de 2015 13:02
  • Olá Jalber,

    Tudo bem?

    Sugiro que faça o teste conforme as resposta que você acha que mais se aplica ao seu projeto e compartilhe conosco o resultado para que a thread possa ser resolvida.


    Marcos Roberto de Souza Junior

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

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e 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.

    terça-feira, 14 de julho de 2015 13:11
  • Jalber uma maneira pratica de formatar um datagrid é setar abaixo do initializeComponent o código:

    Datagridview1.autogeneratecolumns = false;

    Fazendo isso, suas colunas não serão carregadas automaticamente. Assim você pode formata-los da forma que desejar...

    terça-feira, 14 de julho de 2015 13:58