none
Dúvidas RRS feed

  • Pergunta

  • Boa noite pessoal,

    Estou montando uma classe em C#, procurando seguir um exemplo encontrado no MSDN, porém, acho que me perdi em algum momento e agora está dando erros que não consigo resolver. Estou postando o meu código e em seguida os erros.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Drawing;
    using System.Windows.Forms;
    using System.Configuration;
    
    namespace Interface.BLL
    {
        public class ClMontaTelas
        {
            private DataGridView dgvTelaVeiculos = new DataGridView();
    
            public Form1()
            {
                this.Form1 += new EventHandler(Form1_Load);
            }
    
            private void Form1_Load(System.Object sender, System.EventArgs e)
            {
                MontaTelaVeiculos();
            }
    
            private void dgvTelaVeiculos_CellFormatting(object sender,
                System.Windows.Forms.DataGridViewCellFormattingEventArgs e)
            {
                if (e != null)
                {
                    if (this.dgvTelaVeiculos.Columns[e.ColumnIndex].Name == "CodigoID")
                    {
                        if (e.Value != null)
                        {
                            try
                            {
                                e.Value = DateTime.Parse(e.Value.ToString())
                                    .ToLongDateString();
                                e.FormattingApplied = true;
                            }
                            catch (FormatException)
                            {
                                Console.WriteLine("{0} is not a valid date.", e.Value.ToString());
                            }
                        }
                    }
                }
            }
            private void MontaTelaVeiculos()
            {
                this.Controls.Add(dgvTelaVeiculos);
     
                dgvTelaVeiculos.ColumnCount = 5;
    
                //---------- Intercalando cores entre as linhas no DataGridView -----------------------------------------
                dgvTelaVeiculos.RowsDefaultCellStyle.BackColor = Color.White;
                dgvTelaVeiculos.AlternatingRowsDefaultCellStyle.BackColor = Color.PowderBlue;
    
                dgvTelaVeiculos.EnableHeadersVisualStyles = false;
                dgvTelaVeiculos.ColumnHeadersDefaultCellStyle.ForeColor = Color.Blue;
                dgvTelaVeiculos.ColumnHeadersDefaultCellStyle.BackColor = Color.Azure;
                dgvTelaVeiculos.DefaultCellStyle.Font = new Font("Tahoma", 8);
    
                dgvTelaVeiculos.Columns[0].HeaderText = "CódigoID"; dgvTelaVeiculos.Columns[0].Width = 70;
                dgvTelaVeiculos.Columns[1].HeaderText = "Placa do Veiculo"; dgvTelaVeiculos.Columns[1].Width = 115;
                dgvTelaVeiculos.Columns[2].HeaderText = "Final da Placa"; dgvTelaVeiculos.Columns[2].Width = 100;
                dgvTelaVeiculos.Columns[3].HeaderText = "Marca do Veiculo"; dgvTelaVeiculos.Columns[3].Width = 200;
                dgvTelaVeiculos.Columns[4].HeaderText = "Modelo do Veiculo"; dgvTelaVeiculos.Columns[4].Width = 200;
                dgvTelaVeiculos.Columns[5].HeaderText = "Descricao do Veiculo"; dgvTelaVeiculos.Columns[5].Width = 200;
                dgvTelaVeiculos.Columns[6].HeaderText = "Número do Chassis"; dgvTelaVeiculos.Columns[6].Width = 200;
                dgvTelaVeiculos.Columns[7].HeaderText = "Ano do Veiculo"; dgvTelaVeiculos.Columns[7].Width = 120;
                dgvTelaVeiculos.Columns[8].HeaderText = "Tara do Veiculo"; dgvTelaVeiculos.Columns[8].Width = 120;
                dgvTelaVeiculos.Columns[9].HeaderText = "Cor Predominante"; dgvTelaVeiculos.Columns[9].Width = 150;
                dgvTelaVeiculos.Columns[10].HeaderText = "Lotação em Kgs"; dgvTelaVeiculos.Columns[10].Width = 120;
                dgvTelaVeiculos.Columns[11].HeaderText = "Lotação em M3"; dgvTelaVeiculos.Columns[11].Width = 120;
                dgvTelaVeiculos.Columns[12].HeaderText = "Número do Renavam"; dgvTelaVeiculos.Columns[12].Width = 150;
                dgvTelaVeiculos.Columns[13].HeaderText = "Número RNTRC"; dgvTelaVeiculos.Columns[13].Width = 150;
                dgvTelaVeiculos.Columns[14].HeaderText = "Natureza do Veiculo"; dgvTelaVeiculos.Columns[14].Width = 200;
                dgvTelaVeiculos.Columns[15].HeaderText = "Tipo de Vinculo"; dgvTelaVeiculos.Columns[15].Width = 200;
                dgvTelaVeiculos.Columns[16].HeaderText = "Tipo de Veiculo"; dgvTelaVeiculos.Columns[16].Width = 200;
                dgvTelaVeiculos.Columns[17].HeaderText = "Tipo de Veiculo Para Seguradora"; dgvTelaVeiculos.Columns[17].Width = 200;
                dgvTelaVeiculos.Columns[18].HeaderText = "Tipo de Veiculo Para CTE"; dgvTelaVeiculos.Columns[18].Width = 200;
                dgvTelaVeiculos.Columns[19].HeaderText = "Tipo de Carroceria para CTE"; dgvTelaVeiculos.Columns[19].Width = 200;
                dgvTelaVeiculos.Columns[20].HeaderText = "Tipo de Categoria CIOT"; dgvTelaVeiculos.Columns[20].Width = 300;
                dgvTelaVeiculos.Columns[21].HeaderText = "Número de Viagens"; dgvTelaVeiculos.Columns[21].Width = 130;
                dgvTelaVeiculos.Columns[22].HeaderText = "Quilometragem Atual do Veiculo"; dgvTelaVeiculos.Columns[22].Width = 200;
                dgvTelaVeiculos.Columns[23].HeaderText = "Consumo do Veiculo"; dgvTelaVeiculos.Columns[23].Width = 150;
                dgvTelaVeiculos.Columns[24].HeaderText = "Data da Última Viagem"; dgvTelaVeiculos.Columns[24].Width = 200;
                dgvTelaVeiculos.Columns[25].HeaderText = "Data da Última Alteração"; dgvTelaVeiculos.Columns[25].Width = 200;
                dgvTelaVeiculos.Columns[26].HeaderText = "Número na Frota"; dgvTelaVeiculos.Columns[26].Width = 120;
                dgvTelaVeiculos.Columns[27].HeaderText = "Estado do Veiculo"; dgvTelaVeiculos.Columns[27].Width = 150;
                dgvTelaVeiculos.Columns[28].HeaderText = "Municipio do Veiculo"; dgvTelaVeiculos.Columns[28].Width = 200;
                dgvTelaVeiculos.Columns[29].HeaderText = "Código IBGE do Veiculo"; dgvTelaVeiculos.Columns[29].Width = 200;
                dgvTelaVeiculos.Columns[30].HeaderText = "Tipo Proprietario"; dgvTelaVeiculos.Columns[30].Width = 160;
                dgvTelaVeiculos.Columns[31].HeaderText = "Cpf ou Cnpj do Proprietário"; dgvTelaVeiculos.Columns[31].Width = 200;
                dgvTelaVeiculos.Columns[32].HeaderText = "Observação"; dgvTelaVeiculos.Columns[32].Width = 500;
                dgvTelaVeiculos.Columns[33].HeaderText = "Número do Usuário"; dgvTelaVeiculos.Columns[33].Width = 150;
                dgvTelaVeiculos.Columns[34].HeaderText = "Foto do Veiculo"; dgvTelaVeiculos.Columns[34].Width = 150;
    
                //--------- Campos Formatados a Direita -------------------
                //            dgvNaturezas.Columns[5].DefaultCellStyle.Format = "c";
                dgvTelaVeiculos.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvTelaVeiculos.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvTelaVeiculos.Columns[7].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvTelaVeiculos.Columns[8].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
    
                dgvTelaVeiculos.Columns[10].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvTelaVeiculos.Columns[11].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvTelaVeiculos.Columns[12].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvTelaVeiculos.Columns[13].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
    
                dgvTelaVeiculos.Columns[21].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvTelaVeiculos.Columns[22].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvTelaVeiculos.Columns[23].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
    
                dgvTelaVeiculos.Columns[29].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvTelaVeiculos.Columns[33].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
    
                dgvTelaVeiculos.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvTelaVeiculos.Columns[15].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
    
                dgvTelaVeiculos.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
                dgvTelaVeiculos.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    
            }
    
    
        }
    }
    

    sábado, 18 de novembro de 2017 20:46

Respostas

  • Garibaldo, 

    Se pretende que sua aplicação tenha módulos WinForms e ASP.Net no futuro, seu projeto Class Library que será compartilhado entre estes dois módulos não deve ter dependências de plataformas misturadas (você pode até fazer funcionar, mas é uma prática ruim). 

    Sua Class Library comum deve trabalhar num nível de abstração de forma que os módulos WinForms e ASP.Net a utilize, sem ter que adicionar referências para controles de tela ou classes específicas de WinForms ou ASP.Net.

    Quando seu código tiver atingido certa maturidade poderá estudar a implementação do padrão Injeção de Dependência, mas isto sugiro fazer mais adiante para não acrescentar complexidade desnecessária ou tornar as entregas de seu projeto mais lentas.


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    segunda-feira, 20 de novembro de 2017 14:06

Todas as Respostas

  • Para adicionar um evento Form Load o código deveria ser:

    this.Form1.Load += new EventHandler(Form1_Load);

    No entanto, vi que você criou uma classe separada e está tentando utilizá-la como se fosse uma classe que herda a classe Form, o que está errado.

    Além disso, pelo namespace vi que esta classe é da sua BLL (Business Logic Layer), então você não deveria fazer referências a componentes de tela (UI) através deste projeto, é uma prática incorreta.


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.


    domingo, 19 de novembro de 2017 00:14
  • Boa noite Juliano,

    Me ajude a resolver esse problema por favor.

    Garibaldo

    domingo, 19 de novembro de 2017 02:15
  • Sem mais detalhes do projeto não dá pra te ajudar. Se for um projeto apenas de estudo, envie para o GitHub ou outro repositório de código fonte (Bitbucket, Visual Studio Online, etc).

    Também explique melhor o que quer fazer, se são projetos separados, etc. Com as informações que deu, não dá pra saber quase nada.


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    domingo, 19 de novembro de 2017 17:10
  • Boa noite Juliano.

    O meu projeto está sendo desenvolvido em Camadas(Aprendi dessa forma). Uma camada onde defino os meus forms. Uma camada onde eu faço algumas consistências nos campos e uma camada onde eu faço a conexão com o banco de dados. Na Camada onde eu faço as consistências de Campos eu também deixei para criar as classes que serão utilizadas pelo Projeto. Ex. Assinatura digital, Validação de Cnpj/Cpf/Pis, Personalização de Butões, etc,.. 

    Estou desenvolvendo um projeto de CTe(Conhecimento Eletronico). O meu desenvolvimento hoje é para desktop, porém, eu gostaria de desenvolver classes que no futuro eu possa está acessando-as pelo ASP.net.  Como por Exemplo; os datagrides do projeto. Quando eu faço uma consulta no Banco de Dados e alimento o meu datagrid eu gostaria que aparecesse na tela, não o nome do meu campo, EX: Ano_Veiculo Gostaria que aparecesse "Ano do Veiculo". 

    Eu tenho uma tabela chamada Filial. Praticamente todos os meus programas leem essa tabela. Então, em todos os programas eu tenho a descrição do datagrid. Vou te dar um exemplo via código:

    Toodos os meus programas que lêem a Tabela Filial eu estou definindo essa rotina.

    Garibaldo

            private void Mostra_TabelaFiliais()
            {
                //---------- Intercalando cores entre as linhas no DataGridView -----------------------------------------
                dgvFiliais.RowsDefaultCellStyle.BackColor = Color.White;
                dgvFiliais.AlternatingRowsDefaultCellStyle.BackColor = Color.Aquamarine;
    
                //---------- Definição do Cabeçalho e tamanho de cada Campo ---------------------------------------------
                dgvFiliais.Columns[0].HeaderText = "CódigoID";                  dgvFiliais.Columns[0].Width = 70;
                dgvFiliais.Columns[1].HeaderText = "Codigo Filial";             dgvFiliais.Columns[1].Width = 120;
                dgvFiliais.Columns[2].HeaderText = "Código Abreviado";          dgvFiliais.Columns[2].Width = 150;
                dgvFiliais.Columns[3].HeaderText = "Tipo Documento";            dgvFiliais.Columns[3].Width = 140;
                dgvFiliais.Columns[4].HeaderText = "Cnpj/Cpf Filial";           dgvFiliais.Columns[4].Width = 150;
                dgvFiliais.Columns[5].HeaderText = "Nome da Filial";            dgvFiliais.Columns[5].Width = 400;
                dgvFiliais.Columns[6].HeaderText = "Nome Fantasia";             dgvFiliais.Columns[6].Width = 400;
                dgvFiliais.Columns[7].HeaderText = "Cep da Filial";             dgvFiliais.Columns[7].Width = 120;
                dgvFiliais.Columns[8].HeaderText = "Endereço da Filial";        dgvFiliais.Columns[8].Width = 400;
                dgvFiliais.Columns[9].HeaderText = "Número";                   dgvFiliais.Columns[9].Width = 80;
                dgvFiliais.Columns[10].HeaderText = "Complemento do Endereço";  dgvFiliais.Columns[10].Width = 300;
                dgvFiliais.Columns[11].HeaderText = "Bairro da Filial";         dgvFiliais.Columns[11].Width = 300;
                dgvFiliais.Columns[12].HeaderText = "Codigo IBGE";              dgvFiliais.Columns[12].Width = 120;
                dgvFiliais.Columns[13].HeaderText = "Municipio da Filial";      dgvFiliais.Columns[13].Width = 300;
                dgvFiliais.Columns[14].HeaderText = "Estado";                   dgvFiliais.Columns[14].Width = 80;
                dgvFiliais.Columns[15].HeaderText = "Telefone 1";               dgvFiliais.Columns[15].Width = 100;
                dgvFiliais.Columns[16].HeaderText = "Telefone 2";               dgvFiliais.Columns[16].Width = 100;
                dgvFiliais.Columns[17].HeaderText = "Telefone 3";               dgvFiliais.Columns[17].Width = 100;
                dgvFiliais.Columns[18].HeaderText = "Email";                    dgvFiliais.Columns[18].Width = 300;
                dgvFiliais.Columns[19].HeaderText = "Usuário";                  dgvFiliais.Columns[19].Width = 80;
                dgvFiliais.Columns[20].HeaderText = "Observações";              dgvFiliais.Columns[20].Width = 500;
    
                //--------- Campos Formatados a Esquerda --------------------
                dgvFiliais.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvFiliais.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvFiliais.Columns[09].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvFiliais.Columns[19].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
    
                //--------- Campos Cntralizados --------------------
                dgvFiliais.Columns[3].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomCenter;
                dgvFiliais.Columns[14].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomCenter;
    
                //--------- Campos Formatados a Direita -------------------
                //            dgvFiliais.Columns[5].DefaultCellStyle.Format = "c";
    
                dgvFiliais.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
                dgvFiliais.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    
    

    domingo, 19 de novembro de 2017 22:01
  • Boa noite Garibaldo,

    Uma das coisas o Juliano já identificou que é o método de carregamento do form.

     this.Form1 += new EventHandler(Form1_Load);

    Para

     this.Load += new EventHandler(Form1_Load);

    Outra coisa você está definindo um limite de 5 colunas -> dgvTelaVeiculos.ColumnCount = 5; 

    e está tentando alimentar informações para 5,6,7,8 .. 34 ? você não irá conseguir.


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Senior Developer .NET C#
    Development Leader at JAMSOFT Informática
    Criador e Mantenedor do Entity Framework Core for Firebird
    Contribuidor do Entity Framework Core
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter

    domingo, 19 de novembro de 2017 22:33
  • Aqui nesse link você tem uma série de aulas sobre camadas e acesso a banco de dados

    https://www.youtube.com/watch?v=aOYnIaVpPCI&t=292s

    segunda-feira, 20 de novembro de 2017 11:32
  • Garibaldo, 

    Se pretende que sua aplicação tenha módulos WinForms e ASP.Net no futuro, seu projeto Class Library que será compartilhado entre estes dois módulos não deve ter dependências de plataformas misturadas (você pode até fazer funcionar, mas é uma prática ruim). 

    Sua Class Library comum deve trabalhar num nível de abstração de forma que os módulos WinForms e ASP.Net a utilize, sem ter que adicionar referências para controles de tela ou classes específicas de WinForms ou ASP.Net.

    Quando seu código tiver atingido certa maturidade poderá estudar a implementação do padrão Injeção de Dependência, mas isto sugiro fazer mais adiante para não acrescentar complexidade desnecessária ou tornar as entregas de seu projeto mais lentas.


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    segunda-feira, 20 de novembro de 2017 14:06
  • Bom dia,

    Por falta de retorno essa thread está sendo encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    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.

    segunda-feira, 27 de novembro de 2017 12:53
    Moderador