none
CompareValidator + Datas RRS feed

  • 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 &quot;Data Final&quot;" 
                                            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?


    quinta-feira, 16 de agosto de 2012 18:25

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");

    quinta-feira, 16 de agosto de 2012 19:03

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.

    quinta-feira, 16 de agosto de 2012 18:37
  • 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 &quot;Data Inicial&quot;" 
                                            ForeColor="Red" 
                                            SetFocusOnError="True">*
                                        </asp:RequiredFieldValidator>
                                    </td>

    quinta-feira, 16 de agosto de 2012 18:40
  • 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.
    quinta-feira, 16 de agosto de 2012 18:44
  • 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?



    quinta-feira, 16 de agosto de 2012 18:51
  • 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");

    quinta-feira, 16 de agosto de 2012 19:03
  • É isso mesmo Marcos. Consegui descobri o problema. Estava colocando no click no botão, sendo que deverá ser no Page_Load.

    Obrigado pela atenção.

    quinta-feira, 16 de agosto de 2012 19:33
  • De onde vem esse "CompareData"?

    Tentei declarar aqui no Load e não reconheçe!


    Júnior Pacheco

    quarta-feira, 7 de novembro de 2012 17:34