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


  • Ancien MVP SharePoint 8 ans ...
    Des projets .Net, SharePoint 2013 ou Office 365 ??

    Contactez-nous :

Archives

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

- SharePoint 20XX: Script PowerShell pour exporter en CSV toutes les listes d’une ferme pour auditer le contenu avant migration par Blog Technique de Romelard Fabrice le 03-28-2017, 17:53

- Les pièges de l’installation de Visual Studio 2017 par Blog de Jérémy Jeanson le 03-24-2017, 13:05

- UWP or not UWP sur Visual Studio 2015 ? par Blog de Jérémy Jeanson le 03-08-2017, 19:12

- Désinstallation de .net Core RC1 Update 1 ou SDK de Core 1 Preview 2 par Blog de Jérémy Jeanson le 03-07-2017, 19:29

- Office 365: Ajouter un utilisateur ou groupe dans la liste des Site collection Administrator d’un site SharePoint Online via PowerShell et CSOM par Blog Technique de Romelard Fabrice le 02-24-2017, 18:52

- Office 365: Comment créer une document library qui utilise les ContentTypeHub avec PowerShell et CSOM par Blog Technique de Romelard Fabrice le 02-22-2017, 17:06

- [TFS] Supprimer en masse les dépendances à SQL Enterprise ou Developer avant de procéder à une migration par Blog de Jérémy Jeanson le 02-20-2017, 20:30

- Office 365: Attention au volume utilisé par les fichiers de Thèmes de SharePoint Online par Blog Technique de Romelard Fabrice le 02-07-2017, 18:19

- [SCVMM] Supprimer une machine bloquée par Blog de Jérémy Jeanson le 01-31-2017, 21:22

- Microsoft .Net Challenge 2017 par Le Blog (Vert) d'Arnaud JUND le 01-30-2017, 15:25