合并来自多个来源的数据,显示在ASP.Net GridView中

时间:2010-02-05 12:38:46

标签: c# asp.net generics

我正在为我们的某个应用程序编写货币转换模块。我有一个产品清单,我们有兴趣看到价格的货币清单,以及货币汇率清单。我希望用户能够从他们在GridView中看到的列表中选择哪些货币。

我还希望能够修改我的货币列表并包含新货币,而无需对此模块进行其他更改。所以我的GridView显示必须是动态

基本上我打算最后得到一个包含以下列的GridView:

零件号 - 描述 - 美元价格 - 澳元价格 - 英镑价格

美元价格将是静态的,因为它是我们的基础货币,澳元和英镑是用户选择的,可能会列出任意数量的货币。

我通常会使用DataSet和DataTables来完成这项工作,但我确信使用System.Collections.Generics有一种“更好”的方法。

现在我拥有List集合中所需的所有数据,但似乎没有办法定义这些集合如何相互关联,或者将这些集合合并为一个集合,以便它可以绑定到GridView

我是否应该查看List之外的其他内容来实现此目的,或者我是否需要回到我对DataSet和DataTables的原始方法。

谢谢!

******更新/某些代码******

好的,有人要求提供一些代码,所以我会先解释一下我到目前为止的设置。

  1. 产品清单&货币 - 它们来自SQL DB,通过LINQ,因此它们可以是任何System.Collections.Generics对象,例如列表,IEnumerable等。

  2. 货币汇率 - 这些我从欧洲银行的公共XML文件中提取。我下载文件,从中删除我需要的数据,并将其作为List对象存储。

  3. 也可以将货币汇率存储在数据库表中,但是我必须有某种后台流程,每天更新费率。这样,只有当有人访问报告功能时才会更新费率(这只会偶尔发生)。所以我宁愿“按需”获取最新的费率。

    我知道我最终需要的是一些具有以下结构的对象:

    PartNo - 描述 - 基本价格 - 货币价格1,货币价格2,货币价格3

    货币价格的数量未定义,因为它基于用户希望报告显示的货币。

    这是我正在努力的未定义部分,本质上我如何创建一个结构化对象,我不知道直到运行时的完整结构?

    希望这更有意义/帮助!

1 个答案:

答案 0 :(得分:1)

在这里大声思考,但如果你将“外国”价格存储在字典或类似的数据结构中,那么:

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

然后你可以编写一个简单的例程来获取上述对象的集合并将其转换为可以绑定到的DataTable。所述例程总是会创建以下列:

PartNo, Description, BasePrice

然后循环遍历词典中的项目,为每个项目添加其他列。所以如果你在ForeignPrices中有三个项目:

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

您最终会在动态创建的DataTable上添加三个列:

PartNo, Description, BasePrice, AUD, GBP, CAD

当然,您可能想要取消BasePrice属性,只需在ForeignPrices中创建“USD”另一个项目(在这种情况下,它只会被称为价格)。

HTH。