none
Inner Join e DataBindings RRS feed

  • Pergunta

  • Boa Noite!

    Sou Iniciante em projetos e montei um SQL Inner Join da tabela Empresa relacionada com Estado e Cidade. Sendo que para exibir no DataGridViwer funciona perfeitamente, trocando o CO_ESTADO pelo ESTADO e COD_CIDADE pela CIDADE.

    O problema é que no Load do Form, carrego os DataBindings.

    //Preenche o ComboBox Estado com os
                //Dados da Tabela Estados
                cmbUF_Empresa.DataSource = Auxiliar.Variaveis.bsEstados;
                cmbUF_Empresa.DisplayMember = "SIGLA";
                cmbUF_Empresa.ValueMember = "COD_ESTADO";
    
                //Preenche o ComboBox Cidades com os
                //Dados da Tabela Cidades
                cmbCidade_Empresa.DataSource = Auxiliar.Variaveis.bsCidades;
                cmbCidade_Empresa.DisplayMember = "CIDADE";
                cmbCidade_Empresa.ValueMember = "COD_CIDADE";
    
    cmbUF_Empresa.DataBindings.Add("SelectedValue", Auxiliar.Variaveis.bsEmpresas, "COD_ESTADO_EMPRESA");
    cmbCidade_Empresa.DataBindings.Add("SelectedValue", Auxiliar.Variaveis.bsEmpresas, "COD_CIDADE_EMPRESA");

    O DataBindings funciona perfeitamente, selecionando o CombBox conforme clico no DataGridViwer, mais não consigo fazer o mesmo com Inner Join, pois da erro COD_ESTADO e COD_CIDADE =

    Informações adicionais: Não é possível ligar à propriedade ou à coluna

    ou

    Informações adicionais: A cadeia de caracteres de entrada não estava em um formato correto.

    ou

    Informações adicionais: Não há suporte para geração SQL dinâmica em várias tabelas base.

    Como posso contornar isso e deixar meu sistema gravando o COD_ESTADO e COD_CIDADE na tabela EMPRESA e mostrar no DataGridViwer o nome?



    • Editado Sistemas LF quarta-feira, 26 de outubro de 2016 23:27
    quarta-feira, 26 de outubro de 2016 23:10

Respostas

  • cara eu to meio sem tempo aqui mais tenta carregar o grid sem dataset o databind se vai ter que colocar inner na combo "() method to bind data from a data source to the GridView control." id="mt999" style="color:#2a2a2a;font-family:'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif;font-size:13px;" xml:space="preserve"><sentencetext xmlns="http://www.w3.org/1999/xhtml">Use o método de DataBind() para associar dados de uma fonte de dados ao controle de GridView .</sentencetext><sentencetext xmlns="http://www.w3.org/1999/xhtml">Este método resolver todas as expressões de associação de dados no modelo ativa do controle"  oljha o link </sentencetext>

    <sentencetext xmlns="http://www.w3.org/1999/xhtml">https://msdn.microsoft.com/pt-br/library/fkx0cy6d%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396</sentencetext>

    carrega ele mais ou menos assim

    SqlCommand comando = new SqlCommand(); comando.Connection = clsdb.AbreBanco(); comando.CommandType = CommandType.Text; comando.CommandText = "select * from sua_table"; SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = comando; DataSet ds = new DataSet();


    sexta-feira, 28 de outubro de 2016 10:44

Todas as Respostas

  • Deboga ele para ver se esta vindo valor nullo ou zero.
    quinta-feira, 27 de outubro de 2016 11:45
  • Ele não reconhece COD_ESTADO_EMPRESA e COD_COIDADE_EMPRESA se eu buscar a tabela com:

    const string srtComando = "Select E.COD_EMPRESA, E.RAZAOSOCIAL_EMPRESA, E.NOMEFANTASIA_EMPRESA, E.CNPJ_EMPRESA, E.IE_EMPRESA, E.LOGRADOURO_EMPRESA, E.NUMERO_EMPRESA, E.BAIRRO_EMPRESA, E.COMPLEMENTO_EMPRESA, E.CEP_EMPRESA, ES.ESTADO [COD_ESTADO_EMPRESA], C.CIDADE [COD_CIDADE_EMPRESA], E.EMAIL_EMPRESA, E.TELEFONE_EMPRESA, E.CREDITOSIMPLES_EMPRESA, E.AMBIENTE_PRODUCAO, E.AMBIENTE_HOMOLOGACAO, E.SERIE_CTE, E.EMISSAO_CTE, E.NUMERO_CTE_PROD, E.NUMERO_CTE_HOMO, E.SERIE_MDFE, E.EMISSAO_MDFE, E.NUMERO_MDFE_PROD, E.NUMERO_MFDE_HOMO, E.SERIE_NFE, E.EMISSAO_NFE, E.NUMERO_NFE_PROD, E.NUMERO_NFE_HOMO, E.ATIVO From EMPRESAS AS E INNER JOIN CIDADES AS C ON E.COD_CIDADE_EMPRESA = C.COD_CIDADE INNER JOIN ESTADOS AS ES ON E.COD_ESTADO_EMPRESA = ES.COD_ESTADO";

    Mais se eu Utilizar:

    const string srtComando = "Select * From EMPRESAS";

    Funciona perfeitamente o códigos citado acima

    Teria que utilizar algo diferente no DataBindings para utilizar Inner Join?

    quinta-feira, 27 de outubro de 2016 15:09
  • usa join melhor posta seu código para eu ver se consigo te ajudar;
    quinta-feira, 27 de outubro de 2016 15:47
  • Segue o Código Fonte do Form:

    using System; using System.Windows.Forms; namespace LFGerenciador { public partial class frmCadEmpresa : Form { //Variaveis do Form frmPrincipal Retornar; Control CampoSelecionado; bool FunVirgula = false; public frmCadEmpresa(frmPrincipal Principal) { //Define o Form Anterior Retornar = Principal; InitializeComponent(); } private void frmGerenciador_Load(object sender, EventArgs e) {

    //Determina o Local e Base de Dados do Sistema
                Auxiliar.DataBase.LocalBanco();

                //Cria os DataSet
                Auxiliar.Variaveis.Tabelas = new DataSet();
                Auxiliar.Variaveis.Tabelas.Tables.Add("EMPRESAS");

                //Carrega Tabelas
                Auxiliar.Carregar.Empresas();
                Auxiliar.Carregar.Estados();
                Auxiliar.Carregar.Cidades();
                Auxiliar.Carregar.Relacao();

    //Recebe a Tabla Empresas dgvEmpresa.DataSource = Auxiliar.Variaveis.bsEmpresas; //Preenche o ComboBox Estado com os Dados da Tabela Estados cmbUF_Empresa.DataSource = Auxiliar.Variaveis.bsEstados; cmbUF_Empresa.DisplayMember = "ESTADO"; cmbUF_Empresa.ValueMember = "COD_ESTADO"; //Preenche o ComboBox Cidades com os Dados da Tabela Cidades cmbCidade_Empresa.DataSource = Auxiliar.Variaveis.bsCidades; cmbCidade_Empresa.DisplayMember = "CIDADE"; cmbCidade_Empresa.ValueMember = "COD_CIDADE"; txtRazaoSocial_Empresa.DataBindings.Add("Text", Auxiliar.Variaveis.bsEmpresas, "RAZAOSOCIAL_EMPRESA"); txtNomeFantasia_Empresa.DataBindings.Add("Text", Auxiliar.Variaveis.bsEmpresas, "NOMEFANTASIA_EMPRESA"); mskCNPJ_Empresa.DataBindings.Add("Text", Auxiliar.Variaveis.bsEmpresas, "CNPJ_EMPRESA"); txtIE_Empresa.DataBindings.Add("Text", Auxiliar.Variaveis.bsEmpresas, "IE_EMPRESA"); txtLogradouro_Empresa.DataBindings.Add("Text", Auxiliar.Variaveis.bsEmpresas, "LOGRADOURO_EMPRESA"); txtNumero_Empresa.DataBindings.Add("Text", Auxiliar.Variaveis.bsEmpresas, "LOGRADOURO_EMPRESA"); txtBairro_Empresa.DataBindings.Add("Text", Auxiliar.Variaveis.bsEmpresas, "BAIRRO_EMPRESA"); txtComplemento_Empresa.DataBindings.Add("Text", Auxiliar.Variaveis.bsEmpresas, "COMPLEMENTO_EMPRESA"); mskCEP_Empresa.DataBindings.Add("Text", Auxiliar.Variaveis.bsEmpresas, "CEP_EMPRESA"); cmbUF_Empresa.DataBindings.Add("SelectedValue", Auxiliar.Variaveis.bsEmpresas, "COD_ESTADO_EMPRESA"); cmbCidade_Empresa.DataBindings.Add("SelectedValue", Auxiliar.Variaveis.bsEmpresas, "COD_CIDADE_EMPRESA"); txtEmail_Empresa.DataBindings.Add("Text", Auxiliar.Variaveis.bsEmpresas, "EMAIL_EMPRESA"); mskTelefone_Empresa.DataBindings.Add("Text", Auxiliar.Variaveis.bsEmpresas, "TELEFONE_EMPRESA"); txtAliqSimples_Empresa.DataBindings.Add("Text", Auxiliar.Variaveis.bsEmpresas, "CREDITOSIMPLES_EMPRESA"); radProducao.DataBindings.Add("Checked", Auxiliar.Variaveis.bsEmpresas, "AMBIENTE_PRODUCAO"); radHomologacao.DataBindings.Add("Checked", Auxiliar.Variaveis.bsEmpresas, "AMBIENTE_HOMOLOGACAO"); cmbSerieCTe.DataBindings.Add("SelectedItem", Auxiliar.Variaveis.bsEmpresas, "SERIE_CTE"); chkCTe.DataBindings.Add("Checked", Auxiliar.Variaveis.bsEmpresas, "EMISSAO_CTE"); txtNumeroCTeProd.DataBindings.Add("Text", Auxiliar.Variaveis.bsEmpresas, "NUMERO_CTE_PROD"); txtNumeroCTeHomo.DataBindings.Add("Text", Auxiliar.Variaveis.bsEmpresas, "NUMERO_CTE_HOMO"); cmbSerieMDFe.DataBindings.Add("SelectedItem", Auxiliar.Variaveis.bsEmpresas, "SERIE_MDFE"); chkMDFe.DataBindings.Add("Checked", Auxiliar.Variaveis.bsEmpresas, "EMISSAO_MDFE"); txtNumeroMDFeProd.DataBindings.Add("Text", Auxiliar.Variaveis.bsEmpresas, "NUMERO_MDFE_PROD"); txtNumeroMDFeHomo.DataBindings.Add("Text", Auxiliar.Variaveis.bsEmpresas, "NUMERO_MFDE_HOMO"); cmbSerieNFe.DataBindings.Add("SelectedItem", Auxiliar.Variaveis.bsEmpresas, "SERIE_NFE"); chkNFe.DataBindings.Add("Checked", Auxiliar.Variaveis.bsEmpresas, "EMISSAO_NFE"); txtNumeroNFeProd.DataBindings.Add("Text", Auxiliar.Variaveis.bsEmpresas, "NUMERO_NFE_PROD"); txtNumeroNFeHomo.DataBindings.Add("Text", Auxiliar.Variaveis.bsEmpresas, "NUMERO_NFE_HOMO"); } private void frmGerenciador_FormClosing(object sender, FormClosingEventArgs e) { //Retorna para o Form Principal Retornar.Show(); } private void btnNovaEmpresa_Click(object sender, EventArgs e) { } private void btnGravarEmpresa_Click(object sender, EventArgs e) { //Tira o Foco o Botão Selecionado labFocus.Select(); //Fecha a Edião e Grava o Cliente Auxiliar.Variaveis.bsEmpresas.EndEdit(); Auxiliar.Variaveis.daEmpresas.Update(Auxiliar.Variaveis.Tabelas.Tables["EMPRESAS"]); //Mensagem de Sucesso MessageBox.Show("Salvo com Sucesso", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information); } private void btnExcluirEmpresa_Click(object sender, EventArgs e) { } private void SomenteNumero_KeyPress(object sender, KeyPressEventArgs e) { //Aceita Somente Número/Backspace if (!char.IsDigit(e.KeyChar) != (e.KeyChar == (char)Keys.Back)) { e.Handled = true; } } private void Um_Numeros_KeyPress(object sender, KeyPressEventArgs e) { //Detecta qual Campo está Selecionado CampoSelecionado = (Control)sender; //Aceita Somente Número/Backspace e Virgula if (Char.IsDigit(e.KeyChar) || e.KeyChar == ',') { if (FunVirgula && e.KeyChar == ',') { e.Handled = true; } else if (e.KeyChar == ',') { e.KeyChar = ','; FunVirgula = true; } if (CampoSelecionado.Text.Length == 1 && e.KeyChar != ',') { e.Handled = true; } return; } else { e.Handled = true; } if (e.KeyChar == (Char)Keys.Back) { CampoSelecionado.Text = ""; FunVirgula = false; return; } } private void DuasCasas_Leave(object sender, EventArgs e) { //Detecta qual Campo está Selecionado CampoSelecionado = (Control)sender; if (CampoSelecionado.Text == "") { CampoSelecionado.Text = "0,00"; } CampoSelecionado.Text = float.Parse(CampoSelecionado.Text).ToString("N2"); FunVirgula = false; } private void cmbUF_Empresa_Leave(object sender, EventArgs e) { //Verifica se o Texto Preenchido Contem no ComboBox if (cmbUF_Empresa.Text != string.Empty) { if (cmbUF_Empresa.FindStringExact(cmbUF_Empresa.Text) == -1) { MessageBox.Show("Favor Selecionar um UF Corretamento", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); cmbUF_Empresa.Select(); } } } private void cmbCidade_Empresa_Leave(object sender, EventArgs e) { //Verifica se o Texto Preenchido Contem no ComboBox if (cmbCidade_Empresa.Text != string.Empty) { if (cmbCidade_Empresa.FindStringExact(cmbCidade_Empresa.Text) == -1) { MessageBox.Show("Favor Selecionar uma Cidade Corretamente", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); cmbCidade_Empresa.Select(); } } } private void dgvEmpresa_Enter(object sender, EventArgs e) { //Cancela a Edião Atual Auxiliar.Variaveis.bsEmpresas.CancelEdit(); } } }

    Código Fonte DLL Auxiliar

    using System.Data.SqlClient;
    using System.Data;
    using System.IO;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Globalization;
    using System.Drawing;
    using System;
    
    namespace Auxiliar
    {
        public static class Variaveis
        {
            //Variavel de Conexão
            public static SqlConnection Conexao;
            public static string strLocalBanco;
    
            //Variaveis DataSet
            public static DataSet Tabelas;
    
            //Variaveis Listar Estado
            public static SqlDataAdapter daEstados;
            public static BindingSource bsEstados;
    
            //Variaveis Listar Cidades
            public static SqlDataAdapter daCidades;
            public static BindingSource bsCidades;
    
            //Variaveis Empresa
            public static SqlDataAdapter daEmpresas;
            public static BindingSource bsEmpresas;
        }
    
        public static class DataBase
        {
            //Carrega o Local do Banco de Dados
            public static void LocalBanco()
            {
                StreamReader stwLocalBanco = new StreamReader(Application.StartupPath + "\\Config\\Banco de Dados.txt");
                Variaveis.strLocalBanco = stwLocalBanco.ReadLine();
                stwLocalBanco.Close();
    
                Variaveis.Conexao = new SqlConnection(Variaveis.strLocalBanco);
            }
        }
    
    public static class Carregar
        {
            //Carregar Tabela Estados
            public static void Estados()
            {
                const string srtComando = "Select * From ESTADOS Order By ESTADO";
                Variaveis.daEstados = new SqlDataAdapter(srtComando, Variaveis.Conexao);
    
                Variaveis.daEstados.Fill(Variaveis.Tabelas, "ESTADOS");
            }
    
            //Carregar Tabela Cidades
            public static void Cidades()
            {
                const string srtComando = "Select * From CIDADES Order By CIDADE";
                Variaveis.daCidades = new SqlDataAdapter(srtComando, Variaveis.Conexao);
    
                Variaveis.daCidades.Fill(Variaveis.Tabelas, "CIDADES");
            }
    
            //Cria uma Relação com a Tabela Estados e Cidades Para as Tabelas de Cadastro
            public static void Relacao()
            {
                Variaveis.Tabelas.Relations.Add("FK_CIDADES_ESTADOS",
                                                Variaveis.Tabelas.Tables["ESTADOS"].Columns["COD_ESTADO"],
                                                Variaveis.Tabelas.Tables["CIDADES"].Columns["COD_ESTADO"]);
    
                Variaveis.bsEstados = new BindingSource(Variaveis.Tabelas, "ESTADOS");
                Variaveis.bsCidades = new BindingSource(Variaveis.bsEstados, "FK_CIDADES_ESTADOS");
            }
    
            //Carregar Tabela Empresas
            public static void Empresas()
            {
                const string srtComando = "Select E.COD_EMPRESA, E.RAZAOSOCIAL_EMPRESA, E.NOMEFANTASIA_EMPRESA, E.CNPJ_EMPRESA, E.IE_EMPRESA, E.LOGRADOURO_EMPRESA, E.NUMERO_EMPRESA, E.BAIRRO_EMPRESA, E.COMPLEMENTO_EMPRESA, E.CEP_EMPRESA, ES.ESTADO [COD_ESTADO_EMPRESA], C.CIDADE [COD_CIDADE_EMPRESA], E.EMAIL_EMPRESA, E.TELEFONE_EMPRESA, E.CREDITOSIMPLES_EMPRESA, E.AMBIENTE_PRODUCAO, E.AMBIENTE_HOMOLOGACAO, E.SERIE_CTE, E.EMISSAO_CTE, E.NUMERO_CTE_PROD, E.NUMERO_CTE_HOMO, E.SERIE_MDFE, E.EMISSAO_MDFE, E.NUMERO_MDFE_PROD, E.NUMERO_MFDE_HOMO, E.SERIE_NFE, E.EMISSAO_NFE, E.NUMERO_NFE_PROD, E.NUMERO_NFE_HOMO, E.ATIVO From EMPRESAS AS E INNER JOIN CIDADES AS C ON E.COD_CIDADE_EMPRESA = C.COD_CIDADE INNER JOIN ESTADOS AS ES ON E.COD_ESTADO_EMPRESA = ES.COD_ESTADO";
                Variaveis.daEmpresas = new SqlDataAdapter(srtComando, Variaveis.Conexao);
                SqlCommandBuilder cbEmpresa = new SqlCommandBuilder(Variaveis.daEmpresas);
                Variaveis.bsEmpresas = new BindingSource();
    
                Variaveis.Tabelas.Tables["EMPRESAS"].Clear();
                Variaveis.daEmpresas.Fill(Variaveis.Tabelas, "EMPRESAS");
                Variaveis.bsEmpresas.DataSource = Variaveis.Tabelas.Tables["EMPRESAS"];
            }
        }
    }


    • Editado Sistemas LF quinta-feira, 27 de outubro de 2016 17:11
    quinta-feira, 27 de outubro de 2016 17:09
  • cara da uma olhada nesse artigo acho que pode ajudar: http://www.macoratti.net/08/11/c_db_snc.htm
    quinta-feira, 27 de outubro de 2016 18:01
  • Pelo que li não deu certo.

    Tipo, tenho meu DataGridViwer e ele recebe a tabela EMPRESAS, mais ele mostra o numero do ESTADO E CIDADE, mais quero que mostre o nome do ESTADO E CIDADE. Para isso fiz o select com InnerJoin. Por ter feito o select com InnerJoin, o DataBindings não funciona, mais se eu usar um Select * From EMPRESAS, funciona perfeitamente, mais não com os nomes

    quinta-feira, 27 de outubro de 2016 20:15
  • cara eu to meio sem tempo aqui mais tenta carregar o grid sem dataset o databind se vai ter que colocar inner na combo "() method to bind data from a data source to the GridView control." id="mt999" style="color:#2a2a2a;font-family:'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif;font-size:13px;" xml:space="preserve"><sentencetext xmlns="http://www.w3.org/1999/xhtml">Use o método de DataBind() para associar dados de uma fonte de dados ao controle de GridView .</sentencetext><sentencetext xmlns="http://www.w3.org/1999/xhtml">Este método resolver todas as expressões de associação de dados no modelo ativa do controle"  oljha o link </sentencetext>

    <sentencetext xmlns="http://www.w3.org/1999/xhtml">https://msdn.microsoft.com/pt-br/library/fkx0cy6d%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396</sentencetext>

    carrega ele mais ou menos assim

    SqlCommand comando = new SqlCommand(); comando.Connection = clsdb.AbreBanco(); comando.CommandType = CommandType.Text; comando.CommandText = "select * from sua_table"; SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = comando; DataSet ds = new DataSet();


    sexta-feira, 28 de outubro de 2016 10:44
  • Bom dia,

    Devido a falta de interação do autor dessa pergunta,

    essa thread está sendo fechada. Caso o problema ainda

    esteja ocorrendo, favor abrir uma nova thread.

    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.

    segunda-feira, 31 de outubro de 2016 11:27
    Moderador