private void btnSalva_Click(object sender, EventArgs e) { if (txtpalavra.Text == String.Empty) { InformaDiag.Erro("Palavra não pode ser vazio!"); return; } if (ComboClasseGram.SelectedItem == null) { InformaDiag.Erro("Selecione um valor válido de Classe gramatical!"); return; } if (ComboGenero.SelectedItem == null) { InformaDiag.Erro("Selecione um gênero válido!"); return; } if (ComboIdioma.SelectedItem == null) { InformaDiag.Erro("É obrigatório selecionar um idioma!"); return; } string lng; p.lema = txtpalavra.Text; switch (ComboIdioma.SelectedIndex) { case 0: lng = "PT"; break; case 2: lng = "EN"; break; case 1: lng = "ES"; break; default: lng = ""; break; } p.idioma = lng; p.notas_gramatica = txtGramatica.Text; p.nota_cultura = textCultura.Text; p.Definicao = txtDefinicao.Text; switch (ComboGenero.SelectedIndex) { case 0: p.Genero = "M"; break; case 1: p.Genero = "F"; break; case 2: p.Genero = "N"; break; default: p.Genero = "S"; break; } p.ClasseGram = ComboClasseGram.Text; if (p.id <= 0) { if (crud.InsereLinha(tabelasBd.PALAVRA, Palavra.ToListTabela(), p.ToListValores()) > 0) { InformaDiag.Informa("Salvo!"); LimpaCampos(); LimpaModel(); } else { ///CASO HOUVER UMA DUPLICATA, ENTÃO O REGISTRO EXISTENTE NO BANCO DEVE SER CARREGADO NO LUGAR DAS INFORMAÇÕES QUE O USUÁRIO PREENCHEU InformaDiag.Erro("Não foi possível salvar.\nO item caracterizado já existe."); if (InformaDiag.ConfirmaSN("Deseja carregar o registro existente?") == DialogResult.Yes) { p = Palavra.ConverteObject(crud.SelecionarTabela(tabelasBd.PALAVRA, Palavra.ToListTabela(true), "lema='" + p.lema + "' AND ClasseGram='" + p.ClasseGram + "' AND idioma='" + p.idioma + "' AND Genero='" + p.Genero + "'")).First(); MostraDados(); } } } else { crud.UpdateLine(tabelasBd.PALAVRA, Palavra.ToListTabela(), p.ToListValores(), "id=" + p.id.ToString()); InformaDiag.Informa("Salvo!"); LimpaCampos(); } //Uma excessão pode ser lançda aqui quando os valores das chaves estrangerias forem <1, pois estão refernciando um valor que não existe. Como o int no c# não cabe um NULL, seria melhor não enviar o tal valor que evitamos o problema }
private List <string> SanitizaValores(string tabela, List <string> valores) { //função para trocar possíveis valores em string por suas respectivas FK string saida; for (int i = 0; i < valores.Count; i++) { if (SanitizaString(valores.ElementAt(i), out saida)) { valores.RemoveAt(i); valores.Insert(i, saida); } } if (tabela == tabelasBd.CONJUGACAO) { List <string> FKs = new List <string>(); int idx, c = 0; bool[] fila = { false, false }; ///TODO: Ah, enumeradores... /////faço issoi para evitar que seja lançada uma exceção e os valores perdidos no cast logo abaixo //rubrica idx = Palavra.ToListTabela().FindIndex(bs => bs == "Rubrica"); if (!int.TryParse(valores.ElementAt(idx), out int conv) && (valores.ElementAt(idx) != "")) { FKs.Add(valores.ElementAt(idx)); valores.RemoveAt(idx); valores.Insert(idx, "0"); fila[c] = true; } c++; //referencia idx = Palavra.ToListTabela().FindIndex(bs => bs == "referencia_verbete"); if (!int.TryParse(valores.ElementAt(idx), out conv) && (valores.ElementAt(idx) != "")) { FKs.Add(valores.ElementAt(idx)); valores.RemoveAt(idx); valores.Insert(idx, "0"); fila[c++] = true; } c++; Palavra teste = new Palavra(); try { teste = (Palavra)valores; } catch (InvalidCastException) { LoggerErros(EnumErros.Erro_dados); return(null); } catch (FormatException) { LoggerErros(EnumErros.Erro_dados); return(null); } List <MarcaUso> lrub = new List <MarcaUso>(); List <Referencia> lref = new List <Referencia>(); IEnumerator <string> ff = FKs.GetEnumerator(); c = 0; if (fila[c++]) { saida = ff.Current; lrub = MarcaUso.ConverteObject(operacoes.SelecionarTabela(tabelasBd.MARCAS_USO, MarcaUso.ToListTabela(true), "sigla='" + saida + "'")); if (lrub.Count() > 0) { // teste.rubrica = lrub.First().id; } else { return(null); } ff.MoveNext(); } if (fila[c]) { saida = ff.Current; lref = Referencia.ConverteObject(operacoes.SelecionarTabela(tabelasBd.REFERENCIAS, Referencia.ToListTabela(true), "Cod='" + saida + "'")); if (lref.Count > 0) { // teste.referencia_verbete = lref.First().id; } else { return(null); } } valores.Clear(); valores.AddRange(teste.ToListValores()); } return(valores); }
private void btnSalva_Click(object sender, EventArgs e) { bool r; if (txtpalavra.Text == String.Empty) { InformaDiag.Erro("Palavra não pode ser vazio!"); return; } if (ComboClasseGram.SelectedItem == null) { InformaDiag.Erro("Selecione um valor válido de Classe gramatical!"); return; } if (ComboGenero.SelectedItem == null) { InformaDiag.Erro("Selecione um gênero válido!"); return; } if (ComboIdioma.SelectedItem == null) { InformaDiag.Erro("É obrigatório selecionar um idioma!"); return; } p.lema = txtpalavra.Text; p.idioma = PegaSiglaIdioma(); p.Definicao = txtDefinicao.Text; switch (ComboGenero.SelectedIndex) { case 0: p.Genero = "M"; break; case 1: p.Genero = "F"; break; case 2: p.Genero = "N"; break; case 3: p.Genero = "S"; break; case 4: p.Genero = "SM"; break; default: throw new Exception("Opção não disponível na lista de opções de gênero."); } if (p.Genero == "N" && p.idioma == "PT") { InformaDiag.Erro("Gênero inadequado ao idioma."); return; } p.ClasseGram = ComboClasseGram.Text; if (comboSinonimo1.Text == "") { p.Sinonimo1 = 0; } if (comboSinonimo2.Text == "") { p.Sinonimo2 = 0; } p.Sublema = txtSubLema.Text; AjustaSinonimos(); if (p.id <= 0) { r = crud.InsereLinha(tabelasBd.PALAVRA, Palavra.ToListTabela(), p.ToListValores()); } else { r = crud.UpdateLine(tabelasBd.PALAVRA, Palavra.ToListTabela(), p.ToListValores(), "id=" + p.id.ToString()); } //Uma excessão pode ser lançda aqui quando os valores das chaves estrangerias forem <1, pois estão refernciando um valor que não existe. Como o int no c# não cabe um NULL, seria melhor não enviar o tal valor que evitamos o problema if (r) { InformaDiag.Informa("Salvo!"); LimpaCampos(); LimpaModel(); btnNovo_Click(sender, e); } }