Ciao.
Ero incuriosito dal tuo quesito. Pur non usando mai il controllo FormView, ho voluto provare.
Nell'EditItemTemplate ho scelto il controllo che deve ricevere una data
codice:
<asp:TextBox runat="server" ID="data_ora" Text='<%#Eval("data_ora")%>'></asp:TextBox>
e ho deciso di validarlo con un CustomValidator (per prova)
codice:
asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Data non valida" ControlToValidate="data_ora" ClientValidationFunction="valida_data_ora" style="color:Red;"></asp:CustomValidator>
Nota: ControlToValidate può essere valorizzato o no. Ho fatto prove con e senza
ho disabilitato la validazione lato client perchè volevo concentrarmi sulla validazione lato server
codice:
function valida_data_ora(source, arguments)
{
alert(arguments.Value);
arguments.IsValid = true;
}
Il controllo CustomValidator1 non lo vedo lato server, ossia, visual studio non lo vede e non può associare nessun evento. Perciò, nell'evento FormView1.DataBound metto (è un mio esempio):
codice:
Protected Sub FormView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles FormView1.DataBound
Dim lw As FormView = DirectCast(sender, FormView)
If lw.CurrentMode = FormViewMode.Edit OrElse lw.CurrentMode = FormViewMode.Insert Then
Dim dd As DropDownList = TryCast(lw.FindControl("comune"), DropDownList)
If dd IsNot Nothing Then
msole.FillListControl(dd, gl.StringaConnessioneTest, "select id_comune, nome_comune from comuni where codice_istat_regione=""20"" order by nome_comune", "nome_comune", "id_comune", New ListItem(""))
If lw.CurrentMode = FormViewMode.Edit Then
Dim drv As DataRowView = TryCast(lw.DataItem, DataRowView)
Dim chiave As String = l.NullToString(drv("chiave_esterna_numero"))
dd.SelectedValue = chiave
End If
End If
Dim cv As CustomValidator = TryCast(lw.FindControl("CustomValidator1"), CustomValidator)
AddHandler cv.ServerValidate, AddressOf CustomValidator1_ServerValidate
End If
End Sub
e la funzione CustomValidator1_ServerValidate è:
codice:
Private Sub CustomValidator1_ServerValidate(sender As Object, args As System.Web.UI.WebControls.ServerValidateEventArgs)
Dim cv As CustomValidator = DirectCast(sender, CustomValidator)
Dim s As String = ""
Dim result As DateTime
If String.IsNullOrWhiteSpace(cv.ControlToValidate) Then
Dim lw As FormView = Me.FormView1
If lw.CurrentMode = FormViewMode.Edit OrElse lw.CurrentMode = FormViewMode.Insert Then
Dim c As TextBox = TryCast(lw.FindControl("data_ora"), TextBox)
s = c.Text
End If
Else
s = args.Value
End If
If Not String.IsNullOrWhiteSpace(s) Then
args.IsValid = DateTime.TryParse(s, result)
End If
End Sub