Usuário com melhor resposta
CompareValidator + Datas

Pergunta
-
Pessoal, estou com dúvidas com relação ao CompareValidator.
Eu posso ter mais de um CompareValidator para um mesmo TextBox?
Por exemplo:
<td> <asp:TextBox ID="txtDataFin" runat="server" Width="84px"> </asp:TextBox> <asp:MaskedEditExtender ID="txtDataFin_MaskedEditExtender" runat="server" TargetControlID="txtDataFin" MaskType="Date" Mask="99/99/9999"> </asp:MaskedEditExtender> <asp:CalendarExtender ID="txtDataFin_CalendarExtender" runat="server" TargetControlID="txtDataFin" PopupButtonID="imgCalendarioFinal" Format="dd/MM/yyyy"> </asp:CalendarExtender> <asp:Image ID="imgCalendarioFinal" runat="server" ImageUrl="~/Imagens/Calendario24.png" Height="23px" Width="23px" ImageAlign="Top" /> <asp:CompareValidator ID="cvDataFin" runat="server" ControlToValidate="txtDataFin" ErrorMessage="Data Inválida!" Operator="GreaterThan" Type="Date" ValueToCompare="01/01/1900" ForeColor="Red" SetFocusOnError="True">* </asp:CompareValidator> <asp:CompareValidator ID="cvDataFin01" runat="server" ControlToCompare="txtDataIni" ControlToValidate="txtDataFin" ErrorMessage="Data Final não pode ser menor que Data Atual" Operator="GreaterThanEqual" Type="Date" ForeColor="Red" SetFocusOnError="True">* </asp:CompareValidator> <asp:RequiredFieldValidator ID="rvDataFin" runat="server" ControlToValidate="txtDataFin" ErrorMessage="Favor preencher "Data Final"" ForeColor="Red" SetFocusOnError="True">* </asp:RequiredFieldValidator> </td>
Só que desta forma está dando erro: "The value '' of the ValueToCompare property of 'cvDataIni01' cannot be converted to type 'Date' ". Como poderia resolver isso?
- Editado Vinicius Rossi Manduruca quinta-feira, 16 de agosto de 2012 18:26
Respostas
-
você não pode atribuir esta propriedade no evento de click do botão pq a validação da página ocorre antes disso. Se você deseja atribuir esta propriedade no código, faça ou no evento Page_Load ou antes, dessa forma:
CompareData.ValueToCompare = DateTime.Now.ToString("dd/MM/yyyy");
- Marcado como Resposta Vinicius Rossi Manduruca quinta-feira, 16 de agosto de 2012 19:33
Todas as Respostas
-
O erro está dizendo que o elemento de id "cvDataIni01' não pode ser convertido para datetime. Mas cade o controle "cvDataIni01"? Você não postou
O erro pode estar acontecendo pq você deve estar iniciando a propriedade "ValueToCompare" do elemento de id "cvDataIni01" erradamente, ou seja, uma string que não da pra ser convertida em data.
-
Marcos... Segue a Data Inicial... Tinha postado somente a Data Final...
<tr> <td class="style4"> <asp:Label ID="lblDataIni" AssociatedControlID="txtDataIni" runat="server" Text="Data Inicial"></asp:Label> </td> <td> <asp:TextBox ID="txtDataIni" runat="server" Width="84px"> </asp:TextBox> <asp:MaskedEditExtender ID="txtDataIni_MaskedEditExtender" runat="server" TargetControlID="txtDataIni" MaskType="Date" Mask="99/99/9999"> </asp:MaskedEditExtender> <asp:CalendarExtender ID="txtDataIni_CalendarExtender" runat="server" TargetControlID="txtDataIni" PopupButtonID="imgCalendarioInicial" Format="dd/MM/yyyy"> </asp:CalendarExtender> <asp:Image ID="imgCalendarioInicial" runat="server" ImageUrl="~/Imagens/Calendario24.png" Height="23px" Width="23px" ImageAlign="Top" /> <asp:CompareValidator ID="cvDataIni" runat="server" ControlToValidate="txtDataIni" ErrorMessage="Data Inválida!" Operator="GreaterThan" Type="Date" ValueToCompare="01/01/1900" ForeColor="Red" SetFocusOnError="True">* </asp:CompareValidator> <asp:CompareValidator ID="cvDataIni01" runat="server" ControlToValidate="txtDataIni" ErrorMessage="Data Inicial não pode ser maior que Data Atual" Operator="LessThanEqual" Type="Date" ForeColor="Red" SetFocusOnError="True">* </asp:CompareValidator> <asp:RequiredFieldValidator ID="rvDataIni" runat="server" ControlToValidate="txtDataIni" ErrorMessage="Favor preencher "Data Inicial"" ForeColor="Red" SetFocusOnError="True">* </asp:RequiredFieldValidator> </td>
-
vejo que você não está atribuindo no aspx o valor da propriedade "ValueToCompare" do elemento de id "cvDataIni01". Você deve inicar essa propriedade ou então informar a propriedade "ControlToCompare", para assim o validator se baseiar num valor a comparar. Como você não está informando nada, imagino que o validator pega a propriedade ValueToCompare por padrão e está vazia, logo dará o erro.
-
Então... eu não coloquei pq em runtime, ou seja, no clique do botão, eu passo:
cvDataIni01.ValueToCompare = DateTime.Now.ToShortDateString();
Por isso que não tem nada... O que eu deveria de colocar então? Já tentei colocar no ValueToCompare assim:
'<% DateTime.Now.ToShortDateString() %>'
e mesmo assim não deu certo.
Como devo proceder?
- Editado Vinicius Rossi Manduruca quinta-feira, 16 de agosto de 2012 18:54
-
você não pode atribuir esta propriedade no evento de click do botão pq a validação da página ocorre antes disso. Se você deseja atribuir esta propriedade no código, faça ou no evento Page_Load ou antes, dessa forma:
CompareData.ValueToCompare = DateTime.Now.ToString("dd/MM/yyyy");
- Marcado como Resposta Vinicius Rossi Manduruca quinta-feira, 16 de agosto de 2012 19:33
-
-