none
Salvando conteudo do form varias vezes(depende da quantidade de checkbox marcado no Grid). RRS feed

  • Discussão Geral

  • Bom dia,

    Estou com um problema que não consigo resolver de jeito nenhum, provavelmente é algo bobo, mas não encontro a solução, vamos ao problema.

    Tenho um formulário de cadastro com os seguintes campos: AtoID(Chave Primaria,textbox), TipodeAto(combobox), ImovelID(Textbox), TipodeImovel(combobox), DatadeRegistro(DateTimePicker),um DataGridViewTransmitente com o ID, NOME e um checkbox da Tabela PessoaFisica e um DataGridViewAdquirente com ID, Nome e um checkbox da tabela PessoaFisica.

    Eu Preciso que ele salve esses dados, sendo que o usuário pode marcar mais de um registro tanto para Transmitente quanto para Adquirente então eu preciso que ele salve esses dados para cada checkbox marcado.

    Uso Visual Studio(Windows Form, C#), Base de Dados Microsoft Access.

    Agradeço a quem puder me ajudar, Obrigado.

    • Tipo Alterado Marcos SJ segunda-feira, 7 de março de 2016 14:30 How to
    segunda-feira, 7 de março de 2016 11:56

Todas as Respostas

  • Olá José Vitor Junior,

    Tudo bem?

    Poderia informar o erro que a linguagem está gerando que o impede de conseguir fazer isso?

    Atenciosamente


    Marcos SJ

    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 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, 7 de março de 2016 12:11
  • Bom dia,

    Erro ela não da, pois ela sempre salva 1 vez só com o 1° item marcado do DataGrid, eu gostaria de saber como fazer ela salvar varias vezes com os itens diferentes do DataGrid.

    Obrigado


    segunda-feira, 7 de março de 2016 14:05
  • oi Vitor!

    tenta este codigo:

    DataGridViewCheckBoxCell cell;
                foreach (DataGridViewRow linha in dgView.Rows)
                {
                  cell = linha.Cells["nome da coluna (ou o índice)"] as DataGridViewCheckBoxCell;// linha.Cells["nomeDaColuna"] ou linha.Cells[0]
                  bool bChecked = (null != cell && null != cell.Value && true == (bool)cell.Value);
                  if (bChecked)
                  {
    
    //Aqui Coloca a tua instrução de Inserir
                  }
        }
               

    Qualquer coisa, volta a reportar!

    Se comentário for util ou ajudar no teu problema, não esqueca de marcar como Resposta


    "Abraão" - Apreciador de Programação "Senhor Jesus, ilumine o meu caminho..."

    segunda-feira, 7 de março de 2016 14:46
  • Boa Tarde,

    Tentei esse seu código, so que ele não da erro mas também não esta salvando, Segue abaixo o botão gravar como ficou, agradeço sua ajuda...

    private void btnGravar_Click(object sender, EventArgs e)
            {
                if (ValidaCampos() == true)
                {
                    if (Novo)
                    {
                        string strConnection = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\sgc\RGI-IP.accdb";
                        string Query = "SELECT TAID FROM TA WHERE TAID = @TAID";
                        OleDbConnection Connection = new OleDbConnection(strConnection);
                        Connection.Open();
                        OleDbCommand Command = new OleDbCommand(Query, Connection);
                        Command.Parameters.AddWithValue("@TAID", txtTAID.Text);
    
                        OleDbDataReader read = Command.ExecuteReader();
    
                        if (read.Read())
                        {
                            MessageBox.Show("Usuario existe");
                            Connection.Close();
                            Connection.Dispose();
                        }
                        else
                        {
                            DataGridViewCheckBoxCell cell;
                            foreach (DataGridViewRow linha in dtgTransmitente.Rows)
                            {
                                cell = linha.Cells["clnPessoaFisicaT"] as DataGridViewCheckBoxCell;// linha.Cells["nomeDaColuna"] ou linha.Cells[0]
                                bool bChecked = (null != cell && null != cell.Value && true == (bool)cell.Value);
                                if (bChecked)
                                {
                                    string TAID = txtTAID.Text;
                                    string TipoAto = cmbTipoAto.Text;
                                    string Transmitente = dtgTransmitente.CurrentRow.Cells["clnPessoaFisicaT"].Value.ToString();
                                    string NomeT = dtgTransmitente.CurrentRow.Cells["clnNomeTra"].Value.ToString();
                                    string Adquirente = "1";
                                    string NomeA = "Teste";
                                    string ImovelID = txtImovelID.Text;
                                    string TipoImovel = cmbTipoImovel.Text;
                                    string Data = dtpData.Text;
    
                                    string strConnectionn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\sgc\RGI-IP.accdb";
                                    string Comando = "INSERT INTO TA (TAID, TipoAto, PessoaFisicaIDT,NomeT, PessoaFisicaIDA, NomeA, ImovelID, TipoImovel, Data) values(@TAID, @TipoAto, @PessoaFisicaIDT,@NomeT, @PessoaFisicaIDA, @NomeA, @ImovelID, @TipoImovel, @Data)";
                                    OleDbConnection Connectionn = new OleDbConnection(strConnectionn);
                                    OleDbCommand Commando = new OleDbCommand(Comando, Connectionn);
    
                                    Commando.Parameters.Add("@TAID", OleDbType.WChar).Value = TAID;
                                    Commando.Parameters.Add("@TipoAto", OleDbType.WChar).Value = TipoAto;
                                    Commando.Parameters.Add("@PessoaFisicaIDT", OleDbType.WChar).Value = Transmitente;
                                    Commando.Parameters.Add("@NomeT", OleDbType.WChar).Value = NomeT;
                                    Commando.Parameters.Add("@PessoaFisicaIDA", OleDbType.WChar).Value = Adquirente;
                                    Commando.Parameters.Add("@NomeA", OleDbType.WChar).Value = NomeA;
                                    Commando.Parameters.Add("@ImovelID", OleDbType.WChar).Value = ImovelID;
                                    Commando.Parameters.Add("@TipoImovel", OleDbType.WChar).Value = TipoImovel;
                                    Commando.Parameters.Add("@Data", OleDbType.Date).Value = Data;
    
                                    try
                                    {
                                        Connectionn.Open();
                                        Commando.ExecuteNonQuery();
                                        MessageBox.Show("Cadastro Bem Sucedido!");
                                    }
                                    catch (Exception E)
                                    {
                                        MessageBox.Show(E.Message);
                                    }
                                    finally
                                    {
                                        Connectionn.Close();
                                    }
                                }
                            }
                        }
                        txtImovelID.Text = "";
                        ControlarBotoes("Salvar");
                        ControlarCampos(false);
                        LimparCampos();
                        CarregaGridImovel();
                        CarregaGridTA();
                    }
                }
            }

    segunda-feira, 7 de março de 2016 20:47
  • oi vitor em vez de usares o
    dtgTransmitente.CurrentRow.Cells
    usa o
    item.Cells
    e por outra, victor o atributo "clpessoa fisicat" é do tipo Booleano?  porque é o atributo que meteste na condicao:
     cell = linha.Cells["clnPessoaFisicaT"] 
    se for este o atributo que vai condicionar as linhas que serão salvas, porque que meteste tambem na rotina para salvares este atribuito na base de dados?


    "Abraão" - Apreciador de Programação "Senhor Jesus, ilumine o meu caminho..."


    quarta-feira, 9 de março de 2016 09:07
  • Bom dia Abraão,

    Não ele não é o do tipo Booleano; ele é a chave primaria da tabela PessoaFisica que está sendo carregado no Grid;

    Eu deveria ao invés de colocar o "clnPessoaFisicaT" como condicionador das linhas eu deveria colocar a coluna do checkbox?

    Coloquei ele também na rotina para salvar na BD pois ele aparece na tabela também como o ID da PessoaFisicaTransmitente, para caso eu precise buscar outros dados dessa pessoa eles estariam ligados.

    Obs: Irei testar o código novamente mais tarde, agradeço a ajuda.

    quarta-feira, 9 de março de 2016 11:44
  • Oi Victor,  em vez de pores a coluna "clnPessoaFisicaT"  na condica, põe o nome da coluna do checkbox que condiciona as linhas do datagrid que serão salvas (é o logico). Visto que só quereres salvar as linhas da DataGridView que estiverem checada.

     cell = linha.Cells["nome da coluna checkbox"] as DataGridViewCheckBoxCell;


    "Abraão" - Apreciador de Programação "Senhor Jesus, ilumine o meu caminho..."

    quinta-feira, 10 de março de 2016 16:00
  • Cara muito obrigado, agora o programa ta quase 100%, so que supondo que eu selecione três linhas ele ta salavando 3 vezes com o mesmo nome e id(no caso os dados da ultima linha), vc sabe como eu faço pra ele salvar para cada vez que ele for salvar os dados do Transmitente tem que ser os dados da linha checada.



    sexta-feira, 11 de março de 2016 02:21
  • Oi vitor, manda pelomenos este form no ar, pelo dropobox ou outra via, para fazer download e os possiveis acertos

    "Abraão" - Apreciador de Programação "Senhor Jesus, ilumine o meu caminho..."

    segunda-feira, 14 de março de 2016 15:02
  • Segue o link para o projeto no dropbox...

    https://www.dropbox.com/s/f9jb30l2bi54wje/IndicadorReal%28Teste%29.rar?dl=0

    terça-feira, 15 de março de 2016 20:31