//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 { } }
/* * 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 { } }