2010-04-15 5 views
0

J'ai la colonne DateTimeExpired, et je voudrais créer une autre colonne appelée "Expiré" qui affichera "Oui" ou "Non" en fonction de la date d'expiration - "Oui" si la date est déjà passée.
j'ai écrit ceci:Définition de DateDiff pour une colonne calculée dans une datable

DataColumn colExpirationDate = new DataColumn("DateTimeExpired", typeof(DateTime)); 
DataColumn colExpired = new DataColumn("Expired", typeof(string), "IIF(DateDiff(DateTimeExpired, date())>= 0,'No','Yes')"); 

Mais je reçois une exception "L'expression contient DateDiff d'appel de fonction non définie()."

(s'il vous plaît noter que je veux toujours obtenir la ligne, peu importe si elle est arrivé à expiration ou non)

Comment puis-je configurer le texte de la colonne à la forme correcte?

+0

Je ne suis pas sûr que vous pouvez utiliser votre fonction DateDiff là-bas. Consultez la documentation suivante pour l'Expression: http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression(VS.90).aspx –

+0

Même ici .. pas sûr - mais si vous le pouvez , essayez getdate() et ne datez pas() – riffnl

+0

Merci à vous deux. – Nir

Répondre

1

Comme M.A Hanin l'a souligné dans son commentaire, il semble que DateDiff ne peut pas être utilisé dans DataColumn Expressions. Vous pouvez essayer de construire la colonne calculée dans la table sous-jacente à la place (si vous utilisez MS SQL ou similaire)

éditer: Il n'y a pas de fonction à obtenir 'aujourd'hui', mais en supposant que le DataColumn que vous ajoutez n'existe que pendant quelques heures, vous pourriez construire à la date d'aujourd'hui comme une constante, puis utiliser les opérateurs de comparaison au lieu de DateDiff

Essayez ceci:

DataColumn colExpirationDate = new DataColumn("DateTimeExpired", typeof(DateTime)); 
DataColumn colExpired = new DataColumn("Expired", typeof(string), 
    String.Format("IIF(DateTimeExpired > #{0}#,'No','Yes')", 
    DateTime.Now.ToString("dd/MMM/yyyy"))); 

Notez cela ne fonctionnera que si votre DataColumn est retenue dans la mémoire pour moins d'un jour.

+0

Oui, vous avez raison. Je cherche une alternative. Je me souviens que c'était quelque chose comme # date #, mais je ne sais pas exactement. Merci. – Nir

+0

Il n'y a pas de fonctions utiles disponibles, mais vous pourriez être en mesure de le faire en substituant la date d'aujourd'hui comme constante, voir modifier ci-dessus – codeulike

+0

Le code ci-dessus lève cette exception: La chaîne n'a pas été reconnue comme DateTime valide. – Nir

3

Tout ce que vous avez à faire est de convertir vos deux colonnes de date en utilisant Date.ToOADate pour doubler puis soustraire.

J'utilise ToOADate pour remplir des colonnes cachées pour chaque colonne de date.

Questions connexes