2010-01-24 26 views
0

我有一个带有productID和productName的DataView对象, 我从Products Table中获取所有项目并将它们存储在缓存中。 我想获取用户购买的商品,以便在不使用其他查询或连接表的情况下购买商品。如何在DataView对象中重新排序项目

即。 产品数据视图 1.富 2. foo2的 3. Foo3

过滤使用的RowFilter(在的productID(1,3)) UserProducts数据视图 1.Foo 3.Foo3

现在用户ProductsBoughtByUser首先买了Foo3,我如何根据正确的(按时间顺序排列的)数组重新排列物品。即3 1

感谢

回答

5

这里是syntax为DataView.Sort:

private void SortByTwoColumns() 
{ 
    // Get the DefaultViewManager of a DataTable. 
    DataView view = DataTable1.DefaultView; 

    // By default, the first column sorted ascending. 
    view.Sort = "State, ZipCode DESC"; 
} 

从你的原职,这听起来像你只有产品编号和产品名称。除非您还检索购买/订单日期,否则您无法在内存中对其进行排序。

大概做将日期列(而purchaseDate)添加到您已经使用您的SQL语句的最简单的事情,然后做一个view.Sort = "PurchaseDate DESC";

这样的话,你不必再写声明或第二次点击数据库。

编辑: DataRowView具有整数和字符串索引器。例如: -

foreach (DataRowView row in dataView) 
{ 
    var value = row["COLUMN_NAME"]; 
} 

列存储为一个对象,所以你必须检查null并转换为而purchaseDate为了您的数据类型

+0

用户资料的保存在会话,即。 3,1 它不是DataView.Sort,它没有PurchaseDate根据 – eugeneK

+0

@eugeneK进行排序:如果您不想添加必要的列来执行排序,则必须完全重构数据视图。它会按照FIFO概念进行排序,所以如果他们先购买Foo3,则需要为Foo3创建一个新的数据表,并按照Foo1的行进行操作。 –

+0

感谢乔尔我的问题是我如何做到这一点,我如何操作DataView并获得某些行? 我可以用适当的顺序在Array上运行循环,而orders [i]需要从DataView中检索并添加到DataTable中......这更多的是我不知道从DataView的行中获取数据的问题... 谢谢 – eugeneK