2010-02-05 5 views
2

J'écris un module de conversion de devises pour l'une de nos applications. J'ai une liste de produits, une liste de devises pour lesquelles nous sommes intéressés à voir les prix, et une liste de taux de change. Je souhaite que l'utilisateur puisse sélectionner les devises de la liste qu'il voit dans GridView.Combiner des données de plusieurs sources, afficher dans ASP.Net GridView

Je veux également être en mesure de modifier ma liste de devises et d'inclure une nouvelle monnaie, sans avoir à apporter des modifications supplémentaires à ce module. Donc, mon affichage GridView doit être dynamique.

Essentiellement Je prévois de se retrouver avec un GridView qui a les colonnes suivantes:

Part No - Description - USD Prix - AUD Prix - GBP Prix

Le prix de USD serait statique c'est notre devise de base, l'AUD et la GBP sont sélectionnés par l'utilisateur et pourraient avoir potentiellement n'importe quel nombre de devises listées.

J'utiliserais normalement un DataSet et des DataTables pour ce travail, mais je suis sûr qu'il existe un "meilleur" moyen de le faire en utilisant System.Collections.Generics.

Actuellement, j'ai toutes les données dont j'ai besoin dans les collections de listes, mais il ne semble pas y avoir de moyen de définir comment ces collections se relient les unes aux autres, ou de combiner ces collections en une seule. GridView.

Dois-je regarder quelque chose d'autre que List pour y parvenir ou dois-je revenir à mon approche originale d'un DataSet et DataTables.

Merci!

****** MISE À JOUR/CODE ****** CERTAINS

OK, quelqu'un a demandé à un code, donc je vais vous expliquer un peu plus sur ce que j'ai installé jusqu'à présent.

  1. Liste des produits & Devises - Ceux-ci viennent d'un DB SQL via LINQ, afin qu'ils puissent être l'un des objets de System.Collections.Generics, par exemple Liste, IEnumerable etc.

  2. Les taux de change - Ceux-ci Je tire du fichier public XML de la Banque européenne. Je télécharge le fichier, j'enlève les données dont j'ai besoin et je le stocke en tant qu'objet List.

Je pourrait stocker les taux de change dans la table de base de données aussi bien, mais je dois avoir une sorte de processus d'arrière-plan qui va et met à jour les taux chaque jour. De cette façon, les tarifs ne sont mis à jour que lorsque quelqu'un accède à la fonction de rapport (ce qui n'arrivera qu'occasionnellement). Je préférerais donc saisir les derniers tarifs "à la demande".

Ce que je sais que je dois retrouver avec un objet qui a la structure suivante:

d 'art - Description - Prix de base - Monnaie Prix 1, Monnaie Prix 2, Monnaie Prix 3

Lorsque le nombre de cours de devise est undefined, car il est basé sur les devises que l'utilisateur souhaite que le rapport affiche.

C'est la partie indéfinie avec laquelle je me bats, essentiellement comment puis-je créer un objet structuré, dont je ne connais pas la structure complète jusqu'à l'exécution?

Espérons que cela a plus de sens/aide!

+0

Est-ce que nous pourrions voir du code? Quelles différentes collections avez-vous? –

+0

Mise à jour de mon message original avec quelques informations supplémentaires. Merci. – SnAzBaZ

Répondre

1

Il suffit de penser à haute voix, mais si vous avez enregistré vos prix « étrangers » dans une structure de dictionnaire de données ou similaires comme ceci:

class Product { 
    public String PartNo { get; set; } 
    public String Description { get; set; } 
    public Decimal BasePrice { get; set; } 
    public Dictionary<String, Decimal> ForeignPrices; 
} 

Ensuite, vous pouvez écrire une routine simple qui prendrait une collection de au-dessus des objets et le convertir en un DataTable que vous pourriez alors lier à. ladite routine serait toujours créer les colonnes suivantes:

PartNo, Description, BasePrice 

Il serait alors en boucle à travers les éléments dans le dictionnaire, en ajoutant des colonnes supplémentaires pour chaque élément. Donc, si vous aviez trois articles dans ForeignPrices:

ForeignPrices.Items.Add("AUD", 10.50); 
ForeignPrices.Items.Add("GBP", 6.20); 
ForeignPrices.Items.Add("CAD", 5.95); 

Vous finiriez avec trois colonnes supplémentaires sur votre dynamique créée DataTable:

PartNo, Description, BasePrice, AUD, GBP, CAD 

Bien sûr, vous pouvez en finir avec la propriété BasePrice et faites juste "USD" un autre article dans ForeignPrices (auquel cas il s'appellera simplement Prix).

HTH.

Questions connexes