none
Relacionamento de Tabelas com um DataSet contendo duas Tabelas RRS feed

  • Discussão Geral

  • Boa Tarde pessoal 

    Necessito da ajuda para fazer o relacionamento das tabelas, para ao clicar no DataGridView do DG_TitulosaReceber, apareça no DG_NumerodeParcelas de baixo  as parcelas de cada título.

    Quero criar o Sincronismo das duas tabelas, para no load, mostrar o registro do título a receber no DataGridView de cima, e mostrar as respectivas parcelas (deste título) no DataGridView de baixo. Inclusive utilizando um botão, próximo e voltar, de modo que troque para os próximos registros, vinculando o Título a receber e suas parcelas.

    Sem o relacionamento, consigo fazer o Load, mas sem sincronismo. Não dá erro, com o relacionamento que tentei fazer está abortando ao abrir o formulário.

    Segue o código abaixo:

                            

     public partial class Entrada_Titulos_a_Receber : Form
        {
             private DataSet TitulosareceberRelacionamento;


      private void Entrada_Titulos_a_Receber_Load(object sender, EventArgs e)
            {
             // Criando a Relação entre Tabelas Entrada_Titulos_a_Receber X Numero_Parcelas_a_Receber

                   TitulosareceberRelacionamento = new DataSet();
                   DataRelation data_relationReceber = new DataRelation(
                   "EntradaTitulosReceberXNumeroParcelas", TitulosareceberRelacionamento.Tables["Entrada_Titulos_a_Receber"].Columns["dataGridViewTextBoxColumn1"],
                   TitulosareceberRelacionamento.Tables["Numero_Parcelas_a_Receber"].Columns["dataGridViewTextBoxColumn14"]);
                   TitulosareceberRelacionamento.Relations.Add(data_relationReceber);

                this.numero_Parcelas_a_ReceberTableAdapter.Fill(this.sGFRenaissanceDataSetEntradaTitulosReceberXnumeroParcelas.Numero_Parcelas_a_Receber);
                this.entrada_Titulos_a_ReceberTableAdapter.Fill(this.sGFRenaissanceDataSetEntradaTitulosReceberXnumeroParcelas.Entrada_Titulos_a_Receber);

               // this.entrada_Titulos_a_ReceberBindingSource.DataSource = DataContextFactory.DataContext.Entrada_Titulos_a_Recebers;
               // this.numeroParcelasaReceberBindingSource.DataSource = DataContextFactory.DataContext.Numero_Parcelas_a_Recebers;


            }

    Obs.: Sistem aborta ao tentar abrir o Formulário.
    Resposta do Visual Studio, ao Abrir o Formulário Entrada_Titulos_a_Receber:


    NullReferenceException Was Unhandlded

    An unhandled exception of type 'System.NullReferenceException' occurred in SGFRenaissance.exe
    Additional information: Referência de objeto não definida para uma instância de um objeto.

    Trobleshooting tips:
    Check to determine if the object is null before calling the method.
    use the "new" keyword to create an object instance.
    Get General help for this exception


    View Detail...  (mensagem do sistema)

    System.NullReferenceException {"Referência de objeto não definida para uma instância de um objeto."}

    Solicito a ajuda de vocês para Criar o relacionamento das Tabelas pois no DataSource SGFDaRenaissanceDataSetEntradaTitulosReceberXnumeroParcelas
    foi criado no Wizard como "Relacionamento" Sem chave secundária "ForeignKey" pois utilizando as Chaves no relacionamento dava erro.

    Criei o DataSet acima, com o Wizard (criando a query com as duas tabelas) e funcionou exibindo o conteúdo das tabelas corretamente. Verifiquei o funcionamento no SQL Server - tudo ok.
    As duas Tabelas estão juntas no DataSet acima, arrastei a primeira para um DataGridView, e a segunda para o outro DataGridView.
    Estão com os campos corretamente nos DataGridView. Quando abro o formulário, (sem o código de relacionamento) os grids são preenchidos normalmente. Mas com o relacionamento das tabelas dá erro.

    Estrutura das Tabelas:
    Entrada_Titulos_a_Receber - Titulo       
    Cod_Entrada_Titulos_a_Receber -> Int ----> chavePrimaria - Identity yes
    Cod_Cliente         -> Int
    Numero_NF         -> Varchar(20)
    Data_NF                 -> Datetime
    Valor_NF                 -> Decimal(18,2)
    Cod_Receita          -> Int
    Data_Vencimento -> Datetime
    Numero_Parcelas -> Decimal(3,0)
    Valor_Pago_a_Vista         -> Decimal(18,2)
    Cod_Status_Titulo         -> Int
    Historico                 -> Varchar(50)
    Data_Login         -> Datetime
    Login_Name         -> Varchar(15)
    --------------------------------------------------
    Numero_Parcelas_a_Receber
    Cod_Entrada_Titulos_a_Receber -> Int ----> chavePrimaria Recebe o valor da Primeira tabela
    Cod_Numero_Parcelas_Receber -> Int ----> chavePrimaria - Identity yes
    Numero_Parcela         -> Decimal(3,0)
    Data_Vencimento -> Datetime
    Valor_Parcela         -> Decimal(18,2)
    Historico                 -> Varchar(25)
    Cod_Status_Titulo         -> Int

    No Botão Salvar segue o código abaixo. "Não está salvando"

     private void btn_Salvar_Click(object sender, EventArgs e)
            {
                try
                {
                    Data_Agora = DateTime.Now;
                    Data_Agora.Date.ToString("ddMMyyyy", System.Globalization.CultureInfo.InvariantCulture);
                    data_logintxtbox.Text = DateTime.Now.ToString();
                    data_logintxtbox.Refresh();
                    login_NameTextBox.Text = Login.DadosGerais.Loginusuario;
                    this.entrada_Titulos_a_ReceberTableAdapter.Update(this.sGFRenaissanceDataSetEntradaTitulosReceberXnumeroParcelas.Entrada_Titulos_a_Receber);
                    DataContextFactory.DataContext.SubmitChanges();
                    MessageBox.Show("Dados do Título a Receber Incluído / Alterado com Sucesso!");
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show("Falha ao Tentar salvar o Registro!");
                }


    As tabelas estão com 3 registros na primeira, e seis na segunda (numero de parcelas)
    Será que deve ser criado um DataSet para cada tabela ? mas como seria o relacionamento?

    Muitíssimo obrigado pela ajuda.
    Flávio Rocha.





    domingo, 18 de novembro de 2018 14:43