Usuário com melhor resposta
Inner Join e DataBindings

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
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();
- Editado CLAUDIO JOSE sexta-feira, 28 de outubro de 2016 10:48
- Marcado como Resposta Robson William SilvaModerator segunda-feira, 31 de outubro de 2016 11:26
Todas as Respostas
-
-
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?
-
-
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
-
cara da uma olhada nesse artigo acho que pode ajudar: http://www.macoratti.net/08/11/c_db_snc.htm
-
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
-
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();
- Editado CLAUDIO JOSE sexta-feira, 28 de outubro de 2016 10:48
- Marcado como Resposta Robson William SilvaModerator segunda-feira, 31 de outubro de 2016 11:26
-
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.