Cette erreur provient dans 99% des cas de l'attribut nil sur les champs de type "DateTime, Time, Date, Boolean, Whole Number et Decimal".
Si vous rendez un de ces champs null, vous aurez l'erreur précédente car le vide est considéré comme une chaine vide et donc le formatage des données n'est pas respecté...
La méthode de contournement est simple, encore faut-il la connaitre!
Il suffit d'utiliser ces 2 procédures codées en C# qui prennent en paramètre un XPathNavigator du noeud concerné.
La procédure "DeleteNil" permet d'enlever l'attribut nil du noeud s'il existe de manière à insérer une valeur dans le champ sans avoir d'erreur.
public void DeleteNil(XPathNavigator node)
{
if (node.MoveToAttribute("nil", http://www.w3.org/2001/XMLSchema-instance))
node.DeleteSelf();
}
La procédure "InsertNil", quand à elle, permet de supprimer la valeur d'un champ qui n'est pas de type texte.Pour cela il faut supprimer la valeur et remettre l'attribur nil:
public static void InsertNil(XPathNavigator node)
{
if(!node.MoveToAttribute("nil", "http://www.w3.org/2001/XMLSchema-instance"))
{
string result = string.Empty;
int endIndex = node.OuterXml.IndexOf(">");
result = node.OuterXml.Substring(0, endIndex) + " xsi:nil=\"true\" />";
node.OuterXml = result;
}
}
Et voila, vous voila débarassé du cauchemar du "schema validation found non-data type".
Il suffit à présent d'appeler la bonne prodédure.
et sur quel event tu arrives à remettre l'attribut nil ?
RépondreSupprimerje n'ai réussi ni sur le beforeChange, ni sur le validate de mon Date picker
Perso je le fais fonctionner sur l'évènement "OnAfterChange".
RépondreSupprimerCordialement.
Bonjour je vais paraitre stupide mais ce sont mes débuts sur le développement InfoPath et je ne maitrise pas grand chose. J'ai crée la procédure DeleteNil et quand je fait :
RépondreSupprimerXPathNavigator nav = MainDataSource.CreateNavigator();
XPathNavigator myDate = nav.SelectSingleNode("//my:NewjoueurDatedenaissance", NamespaceManager);
DeleteNil(myDate);
myDate.SetValue(string.Empty);
dans un OnClick cela ne fonctionne pas... d'où peux provenir mon erreur ? je cherche à vider un champ date dans un IP web form. Merci d'avance.