//evento adicionado aos controles tipo textbox criados
 private void txtResposta_TextChanged(object sender, EventArgs e)
 {
     try
     {
         //atribui a variavel text o valor do sender tipificando antes o objeto como textbox
         TextBox text = sender as TextBox;
         //pesquisa o estado da resposta na base de preenchimentos
         valores = controle.pesquisaPreenchimento_perg_userNome(perg[count].id, lblUser.Text);
         //atribui o valor da resposta
         valores.valor_resposta = text.Text;
         if (valores.valor_resposta.Equals(""))
         {
             //atribui a resposta o valor de não respondida caso o campo esteja em branco
             selecao          = false;
             valores.resposta = 0;
         }
         else
         {
             //atribui as variaveis a condição de respondida
             selecao          = true;
             valores.resposta = 1;
         }
         //salva as alterações
         controle.atualizarDados();
     }
     //instruções circundadas com try, catch para evitar a exibição de possíveis erros
     catch { }
 }
 //evento adicionado aos controles tipo radio button list criados
 protected void radioResposta_SelectedIndexChanged(object sender, EventArgs e)
 {
     try
     {
         //atribui as variaveis, respectivamente, o valor de respondido, e o texto do item selecionado
         selecao = true;
         string itemSelecionado = radioResposta.SelectedItem.Text;
         //verifica todos os elementos da resposta
         for (int i = 0; i < radioResposta.Items.Count; i++)
         {
             if (itemSelecionado.Equals(radioResposta.Items[i].Text))
             {
                 //altera o estado do item selecionado
                 valores          = controle.pesquisaPreenchimentoUserName(radioResposta.Items[i].Text, lblUser.Text);
                 valores.resposta = 1;
                 controle.atualizarDados();
             }
             else
             {
                 //altera o estado dos itens não selecionados
                 valores          = controle.pesquisaPreenchimentoUserName(radioResposta.Items[i].Text, lblUser.Text);
                 valores.resposta = 0;
             }
         }
         //salva as alterações
         controle.atualizarDados();
     }
     //instruções circundadas com try, catch para evitar a exibição de possíveis erros
     catch { }
 }
        //evento adicionado aos controles tipo checkbox criados
        private void chkResposta_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                //atribui a variavel caixa o valor do sender tipificando antes o objeto como checkbox
                CheckBox caixa = sender as CheckBox;
                //pesquisa o estado da resposta na base de preenchimentos
                valores = controle.pesquisaPreenchimentoUserName(caixa.Text, lblUser.Text);

                if (caixa.Checked)
                {
                    //se o objeto estiver marcado executa as alterações
                    valores.resposta = 1;
                    selecao          = true;
                    controle.atualizarDados();
                }
                else
                {
                    //se o objeto estiver desmarcado executa as alterações
                    valores.resposta = 0;
                    controle.atualizarDados();
                }
            }
            //instruções circundadas com try, catch para evitar a exibição de possíveis erros
            catch { }
        }
 //função para construção de resposta no formato textbox number (não funciona no IE 10 e anteriores)
 private void carregarNumberTextBox()
 {
     try
     {
         //cria um novo panel resposta
         panelResposta = new Panel();
         //adiciona este panel no panel pergunta
         panelPergunta.Controls.Add(panelResposta);
         //cria uma textbox
         TextBox numResposta = new TextBox
         {
             ID           = perg[count].id.ToString(),
             Width        = 65,
             MaxLength    = 6,
             TextMode     = TextBoxMode.Number,
             AutoPostBack = true
         };
         //adiciona atributo para o evento de alteração no conteudo do textbox
         numResposta.Attributes.Add("OnTextChanged", "txtResposta_TextChanged");
         numResposta.TextChanged += new EventHandler(txtResposta_TextChanged);
         //pesquisa se esse campo texto já foi respondido por este usuário
         valores = controle.pesquisaPreenchimento_perg_userNome(perg[count].id, lblUser.Text);
         //se campo já respondido anteriormente, renderiza a resposta junto ao campo
         if (valores.resposta == 1)
         {
             numResposta.Text = valores.valor_resposta;
             selecao          = true;
         }
         //adiciona o campo no panel resposta
         panelResposta.Controls.Add(numResposta);
     }
     //instruções circundadas com try, catch para evitar a exibição de possíveis erros
     catch { }
 }
        //função para construção de resposta no formato radio button list
        private void carregarRadioButtonList()
        {
            try
            {
                //pesquisa a lista de respostas da questão atual e atribui ela a variavel
                resp = controle.pesquisaRespostaQuestão(perg[count].id);
                //limpa o panel pergunta caso haja um panel resposta neste
                panelPergunta.Controls.Remove(panelResposta);
                //cria um novo panel resposta
                panelResposta = new Panel();
                //adiciona ao panel pergunta este novo panel resposta
                panelPergunta.Controls.Add(panelResposta);
                //cria uma radio button list
                radioResposta = new RadioButtonList
                {
                    //atribui a este alguns elementos
                    ID           = perg[count].id.ToString(),
                    AutoPostBack = true
                };
                //alimenta esta radio button list com a lista de respostas
                radioResposta.DataSource     = resp;
                radioResposta.DataTextField  = "resposta";
                radioResposta.DataValueField = "id";
                radioResposta.DataBind();
                //adiciona a esta lista a função do evento de seleção
                radioResposta.Attributes.Add("OnSelectIndexChanged", "radioResposta_SelectedIndexChanged");
                radioResposta.SelectedIndexChanged += new EventHandler(radioResposta_SelectedIndexChanged);

                for (int i = 0; i < radioResposta.Items.Count; i++)
                {
                    //para cada elemento atribui o texto da resposta correspondente na lista
                    string opção = resp[i].resposta;
                    radioResposta.Items[i].Text = opção;
                }

                for (int i = 0; i < radioResposta.Items.Count; i++)
                {
                    //busca na base de dados os preenchimentos para a questão do referido render
                    valores = controle.pesquisaPreenchimentoUserName(radioResposta.Items[i].Text, lblUser.Text);
                    //para cada resposta verifica se existe algum valor preenchido na tabela de preenchimentos, onde preenchido = 1
                    if (valores.resposta == 1)
                    {
                        //caso haja algum valor preenchido altera o estado deste para selected
                        radioResposta.Items[i].Selected = true;
                        //muda o estado da variavel para true, true = respondida
                        selecao = true;
                    }
                }
                //adiciona no panel resposta o controle criado com as respostas
                panelResposta.Controls.Add(radioResposta);
            }
            //instruções circundadas com try, catch para evitar a exibição de possíveis erros
            catch { }
        }
        //função para construção de resposta no formato checkbox list
        private void carregarCheckList()
        {
            try
            {
                //pesquisa as opções de resposta para a pergunta
                resp = controle.pesquisaRespostaQuestão(perg[count].id);
                //limpa o panel pergunta
                panelPergunta.Controls.Remove(panelResposta);
                //cria um novo panel resposta e adiciona este ao panel pergunta
                panelResposta = new Panel();
                panelPergunta.Controls.Add(panelResposta);

                for (int i = 0; i < resp.Count; i++)
                {
                    //cria um novo checkbox para cada opção de resposta que exista para esta pergunta
                    chkResposta = new CheckBox
                    {
                        ID           = perg[count].id.ToString() + i,
                        AutoPostBack = true
                    };
                    //adiciona a estes elementos a função do evento de mudança de estado
                    chkResposta.Attributes.Add("OnCheckedChanged", "chkResposta_CheckedChanged");
                    chkResposta.CheckedChanged += new EventHandler(chkResposta_CheckedChanged);
                    //atribui o texto do elemento
                    chkResposta.Text = resp[i].resposta;
                    panelResposta.Controls.Add(chkResposta);
                    //busca na base de dados os preenchimentos para a questão do referido render
                    valores = controle.pesquisaPreenchimentoUserName(resp[i].resposta, lblUser.Text);
                    //verifica quais elementos estão ou não selecionados
                    if (valores.resposta == 1)
                    {
                        //altera o estado do elemento ao carregar
                        chkResposta.Checked = true;
                        //altera o valor da variavel de selecao para true
                        selecao = true;
                    }
                }
            }
            //instruções circundadas com try, catch para evitar a exibição de possíveis erros
            catch { }
        }
Ejemplo n.º 7
0
        /*
         * Pesquisa de preenchimento
         */

        public void salvarPreenchimento(Prenchimentos preenchimento)
        {
            dbRepository.salvarNovoPreenchimento(preenchimento);
        }
        //função evento do botão salvar
        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                //cria uma nova label
                Label lblAlerta = new Label()
                {
                    ForeColor = System.Drawing.Color.Red,
                    Text      = "Resposta obrigatória"
                };
                //adiciona esta label ao panel pergunta
                panelPergunta.Controls.Add(lblAlerta);
                //cria uma variavel para contar as respostas com valor válido
                int respostas = 0;
                for (int i = 0; i < countMax; i++)
                {
                    //verifica a cada pergunta a obrigatoriedade de resposta
                    if (perg[i].obrigatorio)
                    {
                        //verifica se a pergunta de resposta obrigatória é do tipo radio button
                        if (perg[i].tipo == 1)
                        {
                            //armazena na variavel
                            resp = controle.pesquisaRespostaQuestão(perg[i].id);
                            foreach (Respostas value in resp)
                            {
                                //para cada resposta possivel verifica se o valor esta selecionado
                                valores = controle.pesquisaPreenchimentoUserName(value.resposta, lblUser.Text);
                                if (valores.resposta == 1)
                                {
                                    //se localizar um valor marcado incrementa as respostas validas
                                    respostas++;
                                }
                            }
                        }
                        //verifica se a pergunta de resposta obrigatória é do tipo checkbox
                        else if (perg[i].tipo == 2)
                        {
                            //cria variavel local para verificar se algum box está selecionado, valor padrão false
                            bool testeChk = false;
                            //armazena todas as opções de resposta para a pergunta
                            resp = controle.pesquisaRespostaQuestão(perg[i].id);
                            foreach (Respostas value in resp)
                            {
                                //para cada valor de resposta verifica se a caixa esta marcada
                                valores = controle.pesquisaPreenchimentoUserName(value.resposta, lblUser.Text);
                                if (valores.resposta == 1)
                                {
                                    //identificando ao menos uma caixa como marcada altera o valor da variavel de verificação
                                    testeChk = true;
                                }
                            }
                            if (testeChk)
                            {
                                //sendo o valor da variavel de verificação verdadeiro incrementa as respostas válidas
                                respostas++;
                            }
                        }
                        //todas as respostas do tipo texto entraram nesta condição
                        else
                        {
                            //persquisa o valor do preenchimento para a resposta
                            valores = controle.pesquisaPreenchimento_perg_userNome(perg[i].id, lblUser.Text);
                            //verifica se ela esta respondida e em caso positivo incrementa as respostas válidas
                            if (valores.resposta == 1)
                            {
                                respostas++;
                            }
                        }
                    }
                    //resposta não obrigatória
                    else
                    {
                        //se a resposta é não obrigatória ela em branco é uma resposta valida, logo a variavel respostas é incrementada
                        respostas++;
                    }
                }
                //verifica se todas as respostas possuem respostas válidas segundo seus critérios individuais
                if (respostas == countMax)
                {
                    //atribui true a variavel
                    selecao = true;
                }
                //se houver uma ou mais respostas obrigatórias em branco
                else
                {
                    selecao = false;
                }
                //verifica o estado da variavel que avalia o preenchimento das questões
                if (selecao)
                {
                    try
                    {
                        //salva os preenchimentos e informa o sucesso ao usuário
                        controle.atualizarDados();
                        ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "alerta", "alert('As suas respostas foram salvas, obrigado pela colaboração');", true);
                        //limpa e abandona o estado da sessão
                        Session.Clear();
                        Session.Abandon();
                        //reinicia o contador de perguntas
                        count = 0;
                        //encaminha novamente a tela de login
                        Response.Redirect("Index.aspx");
                    }
                    catch
                    {
                        //trata de forma generica qualquer exceção e envia mensagem de erro ao usuário
                        ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "alerta", "alert('Por algum motivo não foi possivel salvar as suas respostas');", true);
                    }
                }

                else
                {
                    //na impossibilidade de encerrar a aplicação pela existência de resposta obrigatórias vazias informa o usuário
                    ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "alerta", "alert('Existe(m) " + (countMax - respostas).ToString() + " perguntas obrigatórias sem resposta');", true);
                }
            }
            //instruções circundadas com try, catch para evitar a exibição de possíveis erros
            catch { }
        }