Jump to content

rafaelbh

Members
  • Content count

    26
  • Joined

  • Last visited

Community Reputation

2 Comum

About rafaelbh

  1. rafaelbh

    Como utilizar dois "Custom Validator" na mesma página? C#

    Resolvido. Coloquei um if para pegar o controle a ser validado: function DataValidator_ClientValidate(source, clientside_arguments) { clientside_arguments.IsValid = false; if (Page_Validators.controltovalidate == document.getElementById("tbxContato")) { jQuery.ajax({ type: "POST", async: false, url: "detContato.aspx/IsDataValid", data: "{Contato: '" + clientside_arguments.Value + "', ContatoCompleto: '" + $("[id*=tbxContatoCompleto]").val() + "'}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { clientside_arguments.IsValid = msg.d; }, error: function (msg) { clientside_arguments.IsValid = false; } }); } if (Page_Validators.controltovalidate == document.getElementById("ddlHoraFimInsert")) { jQuery.ajax({ type: "POST", async: false, url: "detContato.aspx/IsDataValid_DATAHORA", data: "{HoraFim: '" + clientside_arguments.Value + "', HoraInicio: '" + $("[id*=ddlHoraInicioInsert]").val() + "', DataInicio: '" + $("[id*=tbxDataInicioInsert]").val() + "', DataFim: '" + $("[id*=tbxDataFimInsert]").val() + "'}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { clientside_arguments.IsValid = msg.d; }, error: function (msg) { clientside_arguments.IsValid = false; } }); }; //if (Page_Validators.controltovalidate == document.getElementById("ddlHoraInicioInsert")) { //jQuery.ajax({ // type: "POST", // async: false, // url: "detContato.aspx/IsDataValid_DATAHORA", // data: "{HoraFim: '" + clientside_arguments.Value + "', HoraInicio: '" + $("[id*=ddlHoraInicioInsert]").val() + "', DataInicio: '" + $("[id*=tbxDataInicioInsert]").val() + "', DataFim: '" + $("[id*=tbxDataFimInsert]").val() + "'}", // contentType: "application/json; charset=utf-8", // dataType: "json", // success: function (msg) { // clientside_arguments.IsValid = msg.d; // }, // error: function (msg) { // clientside_arguments.IsValid = false; // } //}); return clientside_arguments.IsValid; } Porém, preferi criar duas funções com nomes diferentes. function DataValidator_ClientValidate(source, clientside_arguments) { clientside_arguments.IsValid = false; jQuery.ajax({ type: "POST", async: false, url: "detContato.aspx/IsDataValid", data: "{Contato: '" + clientside_arguments.Value + "', ContatoCompleto: '" + $("[id*=tbxContatoCompleto]").val() + "'}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { clientside_arguments.IsValid = msg.d; }, error: function (msg) { clientside_arguments.IsValid = false; } }); return clientside_arguments.IsValid; } function DataValidator_ClientValidate_DATAHORA(source, clientside_arguments) { clientside_arguments.IsValid = false; jQuery.ajax({ type: "POST", async: false, url: "detContato.aspx/IsDataValid_DATAHORA", data: "{HoraFim: '" + clientside_arguments.Value + "', HoraInicio: '" + $("[id*=ddlHoraInicioInsert]").val() + "', DataInicio: '" + $("[id*=tbxDataInicioInsert]").val() + "', DataFim: '" + $("[id*=tbxDataFimInsert]").val() + "'}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { clientside_arguments.IsValid = msg.d; }, error: function (msg) { clientside_arguments.IsValid = false; } }); return clientside_arguments.IsValid; } coloquei os dois custom validators: <asp:CustomValidator ID="DataValidator" runat="server" ClientValidationFunction="DataValidator_ClientValidate" ControlToValidate="tbxContato" Display="None" ErrorMessage="Esse Contato já existe!" meta:resourcekey="DataValidatorResource1" OnServerValidate="DataValidator_ServerValidate" SetFocusonerror="True" ValidationGroup="valgroup" /> <ajaxtoolkit:ValidatorCalloutExtender ID="DataValidatorE" runat="server" CloseImageUrl="~/Layout/Imagens/close_12x12.png" CssClass="customCalloutStyle" PopupPosition="BottomRight" TargetControlID="DataValidator" WarningIconImageUrl="~/Layout/Imagens/excl.png" /> <asp:CustomValidator ID="DataValidator_DATAHORA" runat="server" ClientValidationFunction="DataValidator_ClientValidate_DATAHORA" ControlToValidate="ddlHoraFimInsert" Display="None" ErrorMessage="Hora Fim deve ser maior que Hora Início!" meta:resourcekey="DataValidatorResource1_DATAHORA" OnServerValidate="DataValidator_ServerValidate_DATAHORA" SetFocusonerror="True" ValidationGroup="valgroup" /> <ajaxToolkit:ValidatorCalloutExtender ID="DataValidatorE_DATAHORA" runat="server" CloseImageUrl="~/Layout/Imagens/close_12x12.png" CssClass="customCalloutStyle" TargetControlID="DataValidator_DATAHORA" WarningIconImageUrl="~/Layout/Imagens/excl.png" PopupPosition="BottomLeft" /> e meu codebehind ficou assim: [System.Web.Services.WebMethod(Description = "Verifica se o dado já está cadastrado.")] public static bool IsDataValid(string Contato, string ContatoCompleto) { try { SqlConnection conex = DBUtils.CreateConnection(); SqlCommand cmd = new SqlCommand(); string cod = null; int result = 0; //Pega a QueryString no método do tipo static NameValueCollection collection = GetQueryStringCollection(HttpContext.Current.Request.UrlReferrer.Query); if (collection != null && collection.Count > 0) { cod = HttpContext.Current.Server.UrlDecode(collection["cod"]); } if (cod == "0") { result = Queries.selectValidaContato(Contato, ContatoCompleto); } else if (cod != "0") { result = Queries.selectValidaContato(Contato, ContatoCompleto, cod); } if (result == 0) return true; else return false; } catch (Exception ex) { throw ex; } } protected void DataValidator_ServerValidate(object sender, ServerValidateEventArgs e) { e.IsValid = IsDataValid(e.Value, ((TextBox)FormView1.FindControl("tbxContatoCompleto")).Text); } [System.Web.Services.WebMethod(Description = "Verifica se a data/hora início é menor que a data/hora fim.")] public static bool IsDataValid_DATAHORA(string HoraFim, string HoraInicio, string DataInicio, string DataFim) { try { SqlConnection conex = DBUtils.CreateConnection(); SqlCommand cmd = new SqlCommand(); string cod = null; //Pega a QueryString no método do tipo static NameValueCollection collection = GetQueryStringCollection(HttpContext.Current.Request.UrlReferrer.Query); if (collection != null && collection.Count > 0) { cod = HttpContext.Current.Server.UrlDecode(collection["cod"]); } if (Convert.ToDateTime(DataInicio) == Convert.ToDateTime(DataFim)) { if (Convert.ToInt16(HoraInicio) > Convert.ToInt16(HoraFim)) { return false; } else { return true; } } else { return true; } } catch (Exception ex) { throw ex; } } protected void DataValidator_ServerValidate_DATAHORA(object sender, ServerValidateEventArgs e) { e.IsValid = IsDataValid_DATAHORA(e.Value, ((DropDownList)FormView1.FindControl("ddlHoraInicioInsert")).SelectedValue, ((TextBox)FormView1.FindControl("tbxDataInicioInsert")).Text, ((TextBox)FormView1.FindControl("tbxDataFimInsert")).Text); } //Get Querystring name value collection public static NameValueCollection GetQueryStringCollection(string url) { string keyValue = string.Empty; NameValueCollection collection = new NameValueCollection(); string[] querystrings = url.Split('&'); if (querystrings != null && querystrings.Count() > 0) { for (int i = 0; i < querystrings.Count(); i++) { string[] pair = querystrings[i].Split('='); collection.Add(pair[0].Trim('?'), pair[1]); } } return collection; } Resumindo: Na verdade eu tava fazendo tudo certo, só tava esquecendo de colocar no cabeçalho do método a tag do WebMethod: [System.Web.Services.WebMethod(Description = "Verifica se a data/hora início é menor que a data/hora fim.")] Pode fechar o tópico. ;)
  2. Pessoal, tenho uma WebForm com um Formview e preciso validar alguns campos utilizando o Custom Validator. em um validador, vou fazer comparação se já existe determinado usuário cadastrado no banco de dados utilizando um textbox de nome completo e um textbox de apelido. não tenho campo de cpf. (esse validador já está funcionando). porém, preciso fazer uma validação de data e hora inicial ser menor ou igual à data e hora final e consigo usar o validador sem problemas em uma outra página. meu problema é que, agora, tenho uma única página em que tenho que fazer essas comparações. queria usar dois Custom Validator nessa tela, mas não sei como usar. tenho uma função javascript para o lado cliente: function DataValidator_ClientValidate(source, clientside_arguments) { clientside_arguments.IsValid = false; jQuery.ajax({ type: "POST", async: false, url: "detContato.aspx/IsDataValid", data: "{Contato: '" + clientside_arguments.Value + "', ContatoCompleto: '" + $("[id*=tbxContatoCompleto]").val() + "'}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { clientside_arguments.IsValid = msg.d; }, error: function (msg) { clientside_arguments.IsValid = false; } }); return clientside_arguments.IsValid; além da função javascript, tenho o validator associado ao meu campo txbContato: <asp:CustomValidator ID="DataValidator" runat="server" ClientValidationFunction="DataValidator_ClientValidate" ControlToValidate="tbxContato" Display="None" ErrorMessage="Esse Contato já existe!" meta:resourcekey="DataValidatorResource1" OnServerValidate="DataValidator_ServerValidate" SetFocusOnError="True" ValidationGroup="valgroup" /> <ajaxtoolkit:ValidatorCalloutExtender ID="DataValidatorE" runat="server" CloseImageUrl="~/Layout/Imagens/close_12x12.png" CssClass="customCalloutStyle" PopupPosition="BottomRight" TargetControlID="DataValidator" WarningIconImageUrl="~/Layout/Imagens/excl.png" /> e, no arquivo .cs tenho os métodos: protected void btnGravar_Click(object sender, EventArgs e) { if (IsValid) { // bla bla bla } else { ((CustomValidator)FormView1.FindControl("DataValidator")).IsValid = false; } } public static bool IsDataValid(string Contato, string ContatoCompleto) { try { SqlConnection conex = DBUtils.CreateConnection(); SqlCommand cmd = new SqlCommand(); string cod = null; int result = 0; //Pega a QueryString no método do tipo static NameValueCollection collection = GetQueryStringCollection(HttpContext.Current.Request.UrlReferrer.Query); if (collection != null && collection.Count > 0) { cod = HttpContext.Current.Server.UrlDecode(collection["cod"]); } if (cod == "0") { result = Queries.selectValidaContato(Contato, ContatoCompleto); } else if (cod != "0") { result = Queries.selectValidaContato(Contato, ContatoCompleto, cod); } if (result == 0) return true; else return false; } catch (Exception ex) { throw ex; } } protected void DataValidator_ServerValidate(object sender, ServerValidateEventArgs e) { e.IsValid = IsDataValid(e.Value, ((TextBox)FormView1.FindControl("tbxContatoCompleto")).Text); } Não sei como utilizar os dois validadores na mesma página. Já tentei alterar o nome dos métodos/funções, mas não funcionou como deveria. Acredito que seja por causa do "IsValid", que não tenho nem ideia de como diferenciá-lo de acordo com o validador. Não sei se fui muito claro em minha dúvida, mas é: basicamente como utlizar dois custom validator na mesma página?
  3. rafaelbh

    ReportViewer Ordenação Interativa

    É o que já faço, mas aí volta ao meu problema... ordernar o campo concatenado com o interactive sorting. Acredito que não tenha solução para o meu problema, que seria passar duas colunas na sortexpression :( Então, vou exibir os três campos: Nota, anoNota, numNota e não colocar interactive sorting no campo Nota, somente nos outros dois. Quando o usuário quiser, vai ter que ordenar separadamente usando o "shift"... :unsure: De qualquer forma, muito obrigado pela sua paciência e atenção! :thumbsup:
  4. rafaelbh

    ReportViewer Ordenação Interativa

    Sim, mas só uma coluna, certo? Por exemplo, no meu dataset eu tenho as duas colunas (anoNota e numNota), mas não sei como atribuir ambas à uma única coluna do report.
  5. rafaelbh

    ReportViewer Ordenação Interativa

    O que não entendi é que, na consulta, vou passar dois campos no ORDER BY anoNota e numNota. Mas, no report, só terei a coluna Nota (que é a concatenação de numNota + anoNota). Ou seja, a coluna do report é diferente das colunas do ORDER BY. E para criar o Interactive Sorting, tenho que especificar uma coluna ou uma expressão. Desculpa ficar te amolando, mas é q estou confuso rsrsrs
  6. rafaelbh

    Estrutura de tabelas com foreign key

    Você deve criar uma terceira tabela "Usuario X Galeria" que guardará o idUsuario e o idGaleria. Supondo que o usuário 01 tenha acesso às galerias 1 e 2; o usuário 02 tenha acesso à galeria 1; e o usuário 03 tenha acesso às galerias 1 e 2; a tabela ficaria da seguinte forma: IdUsuario| idGaleria 01| 1 01| 2 02| 1 03| 1 03| 2
  7. rafaelbh

    ReportViewer Ordenação Interativa

    Mas, nesse caso, eu teria que colocar o ORDER BY na consulta, certo? E ele viria, a princípio, sempre ordenado por anoNota, numNota. Porém, o usuário vai conseguir ordenar crescente e decrescente ao clicar no ícone de ordenação do report passando o ORDER BY somente na consulta? Se sim, como faço?
  8. rafaelbh

    ReportViewer Ordenação Interativa

    Na verdade, eu também tenho esses valores em colunas separadas, mas não sei como usar os dois campos na sortExpression do reportviewer. Coloquei dessa forma: =Fields!anoNota.Value & Fields!numNota.Value (com vírgula dá erro e tentei com "AND" também) E continua ordenando errado. Tentei também com o CInt(), mas tabém não funcionou... Ordenando com uma coluna funciona: (=Fields!numNota.Value), mas preciso ordenar por anoNota, numNota.
  9. rafaelbh

    ReportViewer Ordenação Interativa

    Olá! Tenho os alguns valores em meu banco de dados, em um campo do tipo varchar, e gostaria de ordená-los assim: numeroNota 1/2011 2/2011 104/2012 110/2012 Porém, quanto mando ordernar pela propriedade "Interactive Sorting" do textbox no reportviewer (ou até mesmo pelo próprio sql server), ele ordena da seguinte forma: numeroNota 1/2011 104/2012 110/2012 2/2011 Como fazer para ordená-lo corretamente? Gostaria que fosse possível a criação da "expression" no próprio reportviewer e não no banco de dados. Quem puder ajudar, ficarei agradecido!
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.