Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

The Mit's Blog

En plus d'intégrer et skier, il sait même écrire !
(Blog de Renaud Comte)

Actualités

Astuce pratique en DataSet : DataColumn Expression

Bien souvent, les jeux de données renvoyés par une base de données via une procédure stocké (de préférence) ne contiennent qu'une partie des données nécessaire à l'affichage final

On peut trouver de nombreux exemple, citons

  • Une sélection des produits avec quantité et prix unitaire mais sans le montant calculé des 2
  • Différents trajets à afficher mais seul ceux dépassant 50 km doivent conduire à une description
  • Un tableau de donnée affichant soit une moyenne soit un maximum
  • ....

En bref, des jeux de données tabulaires à afficher en Datagrid (ou Datalist ou Repeater ou ....)

Mais il manque des données soit à calculer ou à traiter ....

Le premier réflexe serait de modifier la procédure de BDD
>>> Mais imaginez que vous partagez cette procédure avec d'autre ou que la couche d'accés au données existe déja ?

Complexifions un peu : imaginez que vous ne puissez la modifier ?
>>> Que le jeu de donnée proviennent d'un Web Services XML
>>> un fichier XML
>>> un lot d'enregistrement SAP (Ahhh le Dotnet Connector)

En résumé, pas la possibilité de modifier la source des données

Pas très grave, on peut modifier à la mano : oui

Dans le cas d'un affichage Web pour gérer un lien externe conditionné
>>> ItemDatabound / Itemstyle / ...

Bref le traitement vas etre intiment lié à son affichage, mais si le calcul est reutilisable ou d'autre sont nécessaires ...

Bien il y a une solution assez simple et vraiment sympathique : le DataColumn Expression
(Je sais, je l'avais annoncé dans le titre)

>>> Cette propriété des Datacolums permet de simplement définir une opération de calcul à effectuer
(on comprend mieux la notion le surnom de  "mini base de données" donné au Dataset)

Opération pouvant reposer sur les autres colonnes de votre datatable et diverses fonctions conditionnelles ou mathématiques

Token Meaning
ColumnName Refer to columns by name. If the column name contains a special character, enclose the name in square brackets.
50 or 50.0 or 5E1 Numeric constants can be represented as integers, floating point, or in scientific notation.
#9/2/1959# Date constants should be quoted with pound signs.
'Polygon' String constants should be quoted with single quotes.
AND, OR, NOT Boolean operators
<, >, <=, >=, <>, =, IN, LIKE Comparison operators
+, -, *, /, % Arithmetic operators
+ String concatenation operator
* or % Wildcards for string comparison
Child.ColumnName or Child(RelationName).ColumnName Column in a child table
Parent.ColumnName Column in a parent table
Sum(), Avg(), Min(), Max(), StDev(), Var() Aggregate functions
CONVERT(expression, type) Convert an expression to a .NET type
LEN(string) Length of a string
ISNULL(expression, replacement) Returns the expression if it isn't Null, otherwise returns the replacement
IIF(expression, truepart, falsepart) Returns truepart or falsepart depending on whether the expression is true or false
TRIM(expression) Removes leading and trailing blanks
SUBSTRING(expression, start, length) Returns length number of characters from the specified starting point

>>> Revenons à notre probléme de base : il suffit donc de rajouter une datacolumn à votre Datatable, lui specifier l'expression nécessaire  (perso : le IIF avec le ISNULL associé au + ou == me servent souvent :) ) et ensuite binder sans soucis son controle 

// Add a calculated column to the order details
dsMain.Tables["OrderDetails"].Columns.Add("ItemTotal", typeof(Double));
dsMain.Tables["OrderDetails"].Columns["ItemTotal"].Expression =
    "UnitPrice * Quantity * (1 - Discount)";


Ainsi les calcus sont automatiques et indépendant du control et facilement adaptables

Ah ce qu'on peut apprecier les DataTables et le DataSet ...
Bref du encore un peu de Bonheur.Net

Une remarque cependant : attention aux problémes de performance qui peuvent apparaitre sur de gros jeu de données. Ils sont à bien pondérer.

En même temps, le temps de traitement sera plus long sur la donnée que sur le temps d'affichage de celui ci , vu qu'il sera direct :)

Source de l'astuce : http://www.ondotnet.com/pub/a/dotnet/2003/05/26/datacolumn_expressions.html?page=last&x-order=date

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: mercredi 27 octobre 2004 18:15 par themit
Classé sous :

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Nouveau blog en anglais / New blog in english ! par Le blog de Patrick [MVP SharePoint] le il y a 16 heures et 53 minutes

- [ #Yammer ] From Mailbox to Yammer and back / De votre messagerie vers Yammer et retour ! par Le blog de Patrick [MVP SharePoint] le 09-15-2014, 11:31

- [ #Office 365 ] New service settings panel / Nouveau panneau de paramétrage des services par Le blog de Patrick [MVP SharePoint] le 09-11-2014, 08:50

- Problème de déploiement pour une démo SharePoint/TFS? par Blog de Jérémy Jeanson le 09-10-2014, 21:52

- [ #Office365 ] Delve first impressions / Premières impressions sur Delve par Le blog de Patrick [MVP SharePoint] le 09-09-2014, 16:57

- [ #Office365 ] How to change Administration console language ? / Comment changer la langue de la console d’administration ? par Le blog de Patrick [MVP SharePoint] le 09-09-2014, 08:25

- [ #SharePoint 2013 ] Suppression de bases de données en état “Pas de Réponse” par Le blog de Patrick [MVP SharePoint] le 09-04-2014, 14:10

- Changer l’adresse d’une ferme Office Web Apps associée à SharePoint par Blog de Jérémy Jeanson le 09-01-2014, 22:21

- Une ferme #SharePoint 2013 dans @Azure en quelques clics (1ère partie) ! par Le blog de Patrick [MVP SharePoint] le 08-28-2014, 18:52

- SharePoint 2013: Préparation de la migration - Création des site Templates dans 2010 et 2013 par Blog Technique de Romelard Fabrice le 08-20-2014, 16:31